Skip to content

chore: release v5.53.0#83

Merged
rolling-codes merged 2 commits into
mainfrom
release_v5.53.0
Jul 11, 2026
Merged

chore: release v5.53.0#83
rolling-codes merged 2 commits into
mainfrom
release_v5.53.0

Conversation

@rolling-codes

@rolling-codes rolling-codes commented Jul 11, 2026

Copy link
Copy Markdown
Owner

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

  • B-007 — Invite cache leaked memory across guild removals; now pruned in
    _on_guild_remove.
  • B-015_grant_level_reward caught Forbidden only; HTTPException
    parent class now caught so all Discord errors are handled.
  • B-016auto_role post-sleep add_roles failed silently on NotFound
    and generic HTTPException; both now absorbed.

Architecture improvements

  • Single bot-level _cooldown_cleanup_loop replaces per-callback sweep tasks
    (which were unreliable at import time). A _COOLDOWN_MAX_ENTRIES=50_000 hard
    cap with oldest-bucket eviction prevents unbounded growth.
  • Cooldown registry entry is now stored on the built callback and removed from
    bot._cooldown_registries when the owning plugin is unloaded via
    remove_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 regression
  • test_cooldown_cleanup.py — 10 tests (expiry, cap eviction, lifecycle)
  • test_event_bus.py extensions — EventBus observability
  • test_p1_bug_sweep.py — B-007/B-015/B-016 regressions

Upgrade notes

No breaking changes. Drop-in upgrade from v5.52.0.

Install

pip install easycord==5.53.0

Artifacts

  • easycord-5.53.0-py3-none-any.whl
  • easycord-5.53.0.tar.gz

Summary by Sourcery

Prepare the v5.53.0 release of EasyCord with framework hardening fixes, expanded regression coverage, and updated metadata and docs.

Bug Fixes:

  • Fix invite cache not being pruned on guild removal to prevent memory leakage (B-007).
  • Broaden level reward error handling to catch all Discord HTTP exceptions instead of Forbidden-only (B-015).
  • Make auto-role member join handling absorb NotFound and generic HTTP exceptions to avoid silent failures (B-016).
  • Resolve CLI scaffold collisions when a plugin slug conflicts with an existing directory.
  • Harden cooldown behaviour with a single bot-level cleanup loop, size cap, and proper registry cleanup on plugin unload.

Enhancements:

  • Improve cooldown architecture with centralized cleanup, hard entry cap, and lifecycle-aware registry management.
  • Enhance EventBus observability and related behaviours as part of framework hardening.
  • Add structured release notes for v5.53.0 under a dedicated release directory.

Build:

  • Bump project version and distribution download URLs from 5.52.0 to 5.53.0 in packaging metadata.

Documentation:

  • Update README, getting-started guide, and project metadata to reference v5.53.0 release artifacts and links.

Tests:

  • Add new regression suites for bot permissions adoption rules (including B-021 structural guard).
  • Add CLI scaffold collision regression tests.
  • Add dedicated tests for cooldown cleanup expiry, eviction under cap, and lifecycle behaviour.
  • Extend EventBus tests to cover observability scenarios.
  • Add a consolidated regression suite for bugs B-007, B-015, and B-016, increasing total tests to 1513.

@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@sourcery-ai

sourcery-ai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Reviewer's Guide

Release 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 unload

sequenceDiagram
    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
Loading

File-Level Changes

Change Details Files
Document new tests, bug fixes, and cooldown architecture improvements for the v5.53.0 release in the changelog.
  • Added v5.53.0 section summarizing newly added regression test modules and coverage areas.
  • Recorded invite cache pruning on guild removal, broadened HTTPException handling in level rewards and auto-role, and consolidated cooldown cleanup with size cap and plugin lifecycle cleanup.
  • Noted CLI scaffold collision fix and updated total test count from 1438 to 1513.
CHANGELOG.md
Update user-facing version badges, install instructions, and release links to point to v5.53.0 artifacts.
  • Bumped README version badge from v5.52.0 to v5.53.0.
  • Updated wheel download URL in README and docs getting-started guide to the v5.53.0 release path.
  • Changed visible release tag link at the bottom of README to v5.53.0.
README.md
docs/getting-started.md
Bump project version and distribution metadata from 5.52.0 to 5.53.0.
  • Updated project version field in pyproject.toml to 5.53.0.
  • Adjusted project Download and Release URLs to reference the v5.53.0 wheel and tag.
  • Aligned the package version attribute with the new release version.
pyproject.toml
easycord/__init__.py
Add dedicated release notes file for v5.53.0 under the release_v5.53.0 directory.
  • Created notes.md capturing overview, bug fixes, architecture improvements, new regression tests, upgrade notes, and artifacts for v5.53.0.
  • Ensured release notes mirror the public release announcement for consistency across documentation.
release_v5.53.0/notes.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@github-actions github-actions Bot added the ci label Jul 11, 2026
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • Release

    • EasyCord v5.53.0 is now available.
  • Bug Fixes

    • Improved invite cache cleanup when servers are removed.
    • Expanded handling of Discord and role-assignment errors.
    • Fixed command-line scaffold name collisions.
  • Performance & Reliability

    • Improved cooldown cleanup and bounded retained cooldown data.
  • Documentation

    • Updated installation instructions, version references, and release notes.

Walkthrough

EasyCord 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.

Changes

EasyCord v5.53.0 Release

Layer / File(s) Summary
Version metadata and installation references
easycord/__init__.py, pyproject.toml, README.md, docs/getting-started.md
Package version constants, project metadata, installation commands, badges, and release links now reference v5.53.0.
Release notes and changelog
CHANGELOG.md, release_v5.53.0/notes.md
Release documentation records the v5.53.0 fixes, architecture updates, regression tests, test total, and artifact links.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested labels: release:minor

Poem

I’m a rabbit with a release in my hat,
Hopping from fifty-two to fifty-three just like that.
Changelogs bloom and install links gleam,
Tests guard the burrow, polished and clean.
Squeak—v5.53.0 joins the stream!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the release version bump and matches the main change.
Description check ✅ Passed The description matches the release prep, listing fixes, tests, and version updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release_v5.53.0

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies and removed ci labels Jul 11, 2026

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@codecov

codecov Bot commented Jul 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between dd4b377 and f61bf28.

📒 Files selected for processing (6)
  • CHANGELOG.md
  • README.md
  • docs/getting-started.md
  • easycord/__init__.py
  • pyproject.toml
  • release_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.json with Graphify; do not manually read source files first or read deprecated vault files.

Files:

  • docs/getting-started.md
  • pyproject.toml
  • release_v5.53.0/notes.md
  • easycord/__init__.py
  • README.md
  • CHANGELOG.md
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

Async tests use pytest-asyncio with asyncio_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__.py are 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 from easycord, never from underscore-prefixed internal modules such as easycord._*.
Use ctx.user or ctx.member, never ctx.author; treat ctx.is_admin as a property and never call it.
Store per-guild plugin state in the database layer, not on the Plugin instance.
Never hardcode response strings in plugins; look them up with ctx.t(...).
Always await ToolLimiter.check_limit, reset_user, and reset_tool.
Require an explicit ToolSafety annotation when registering a tool with @ai_tool.
Use SENDABLE_CHANNEL_TYPES to narrow a channel before calling .send().
Initialize cooldown sentinels in LevelsPlugin._cooldowns to float("-inf"), not 0.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.
Use ServerConfigStore.mutate(guild_id, fn) for every config read-modify-write operation; fn must 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 as channel.send or add_roles outside the configuration mutation lock.
sync_commands() must require confirm_removals=True before allowing command removals.
bot.run(reload=True) is development-only; its watcher must be cancelled by close().
Plugin.on_reload() runs on the new instance after a successful hot-reload swap, with self.bot available, 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!

Comment thread CHANGELOG.md
Comment on lines +5 to +6
### Added
- `tests/test_bot_permissions_adoption.py` — 16 regression tests pinning

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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

Comment thread release_v5.53.0/notes.md
Comment on lines +44 to +46
```
pip install easycord==5.53.0
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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 -->

@rolling-codes rolling-codes merged commit 88eea95 into main Jul 11, 2026
17 checks passed
@rolling-codes rolling-codes deleted the release_v5.53.0 branch July 11, 2026 23:42
This was referenced Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies documentation Improvements or additions to documentation release:minor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants