Skip to content

Conversation

@winstonsung
Copy link
Collaborator

@winstonsung winstonsung commented Jan 10, 2026

Change-Id: I0ed50156553e78fb3e6adb2d796d63151e7011f9

Summary by CodeRabbit

  • New Features

    • Added administrator permission checks for load and unload commands.
  • Chores

    • Updated to Python 3.12.
    • Bumped version to 0.1.14.
    • Updated dependencies.

✏️ Tip: You can customize this high-level summary in your review settings.

@winstonsung winstonsung added this to the 0.1.14 milestone Jan 10, 2026
@winstonsung winstonsung self-assigned this Jan 10, 2026
@winstonsung winstonsung added dependencies Pull requests that update a dependency file security labels Jan 10, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 10, 2026

Caution

Review failed

An error occurred during the review process. Please try again later.

Walkthrough

This PR upgrades the project to Python 3.12, migrates from pip to uv package manager across all CI/CD workflows, generates hash-pinned dependency files for reproducibility, bumps the version to 0.1.14, and adds administrator permission validation to the load and unload commands.

Changes

Cohort / File(s) Summary
CI/CD Workflow Modernization
.github/workflows/pylint.yml, unittest.yml, black.yml
Updated Python matrix from 3.11 to 3.12; added uv installation (astral-sh/setup-uv@v5) and virtual environment setup; replaced all pip commands with uv equivalents (uv pip sync pylock.toml, uv run pylint/unittest/black)
Dependency Management
pyproject.toml, requirements.txt, requirements_dev.txt, pylock.toml
Updated pyproject.toml to version 0.1.14, Python requirement to >=3.12 <3.13, and new dependency-groups structure; auto-generated requirements files with hash-pins and provenance comments via uv; introduced new pylock.toml lockfile for deterministic installations
Dependabot Configuration
.github/dependabot.yml
Changed ecosystem from "pip" to "uv" for dependency updates
Dependency Sync Workflow
.github/workflows/sync_dependencies.yml
New GitHub Actions workflow that synchronizes pylock.toml, requirements.txt, and requirements_dev.txt by running uv lock/export commands on changes to dependencies
Version & Release Notes
cog/version_info.py, RELEASE-NOTES-0.1.md
Updated hardcoded version from 0.1.13 to 0.1.14 and date to 2026-01-10; added comprehensive 0.1.14 release notes section with placeholder subsections
Permission Gating
main.py
Added administrator permission checks to load and unload commands; returns ephemeral Chinese message if user lacks permissions

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • YuevUwU
  • Maxhu787

Poem

🐱 Purrs wisely
From pip to uv, the dependencies flow,
Python 3.12 makes the workflows go,
Hash-pinned and locked, reproducible dreams,
Version 0.1.14 gleams,
Admin checks guard the gates—meow!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Version 0.1.14' directly corresponds to the main objective of this PR—releasing version 0.1.14 with version bumps, dependency updates, and Python 3.12 migration.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
pyproject.toml (1)

44-44: Missing Python 3.12 classifier, this cat notices! 🔍

You've expanded Python support to 3.12 (line 12: requires-python = ">=3.11, <3.13"), but the classifiers only list Python 3.11. Please add the Python 3.12 classifier for proper PyPI metadata.

🐾 Suggested fix
 	"Programming Language :: Python :: 3.11",
+	"Programming Language :: Python :: 3.12",
 	"Programming Language :: SQL",
🤖 Fix all issues with AI agents
In @requirements.txt:
- Line 2: requirements.txt currently pins an insecure/older set; update the file
to include the security-fixed package versions referenced in the review: set
aiohttp==3.13.3 (or newer 3.13.x security release), add or update werkzeug to
3.1.5, urllib3 to 2.6.3, and certifi to 2026.1.4 so the project depends on the
patched releases; ensure exact package names (aiohttp, werkzeug, urllib3,
certifi) are updated in requirements.txt and run dependency install/tests to
verify compatibility.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 421cdc9 and 9424a0f.

📒 Files selected for processing (7)
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • requirements.txt
  • pyproject.toml
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
🔇 Additional comments (9)
.github/workflows/pylint.yml (1)

14-14: Purr-fect addition of Python 3.12 to the test matrix! 🐱

This change aligns well with the updated Python version requirements in pyproject.toml and ensures your linting runs against both supported Python versions.

.github/workflows/unittest.yml (1)

14-14: Excellent! Python 3.12 coverage for unit tests! 😺

This meow-trix expansion ensures comprehensive testing across both supported Python versions, maintaining consistency with the pylint workflow.

requirements.txt (1)

1-24: Alphabetical order maintained paw-fectly! 📚

Based on learnings, dependencies must be in alphabetical order, and this file maintains that requirement correctly.

requirements_dev.txt (2)

1-16: Development dependencies nicely sorted! 🎯

Based on learnings, dependencies must be in alphabetical order, and this file maintains that requirement correctly.


11-11: Review the pathspec 1.0.0 breaking changes before upgrading 🙀

pathspec 1.0.2 introduced breaking changes from 0.12.1:

  • Pattern rename: gitwildmatchgitignore (impacts gitignore pattern matching)
  • Removed protected _match_file() method (affects custom subclasses)
  • New "backends" API for pattern matching
  • Dropped Python 3.8 support

Verify that your linting and testing tools that depend on pathspec are compatible with these changes.

pyproject.toml (2)

8-8: Version bump and Python support expansion look great! 🎉

The version update to 0.1.14 and the Python requirement expansion to support both 3.11 and 3.12 align perfectly with the CI workflow updates.

Also applies to: 12-12


59-59: Dev dependencies match requirements_dev.txt perfectly! ✨

The black and pytest versions are correctly synchronized with requirements_dev.txt.

Also applies to: 61-61

cog/version_info.py (2)

14-14: 🐱 Purr-fect version update!

Version number correctly bumped to 0.1.14.


19-19: 🐱 Date looks good!

Version date correctly updated to match the release date.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @RELEASE-NOTES-0.1.md:
- Around line 123-206: Replace the placeholder bullets under the "## SCAICT-uwu
0.1.14" section with real entries: under "### New developer features" add "Added
Python 3.12 support (updated requires-python and classifier in pyproject.toml)"
and "Updated CI to test on Python 3.12"; under "### Changed external
dependencies" list the four runtime updates using the project's "Updated" format
(aiohttp 3.13.2 → 3.13.3, certifi 2025.11.12 → 2026.1.4, urllib3 2.5.0 → 2.6.3,
werkzeug 3.1.4 → 3.1.5); under "### Changed development-only external
dependencies" list the five dev updates using "Updated" (astroid 4.0.2 → 4.0.3,
black 25.11.0 → 25.12.0, pathspec 0.12.1 → 1.0.2, platformdirs 4.5.0 → 4.5.1,
pytest 9.0.1 → 9.0.2); remove the "* …" placeholders and keep consistent
"Updated" wording and formatting throughout.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9424a0f and ea32189.

📒 Files selected for processing (3)
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pyproject.toml
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • pyproject.toml
🔇 Additional comments (5)
cog/version_info.py (1)

14-19: LGTM! Version constants correctly updated.

The version number and date have been properly updated to reflect the 0.1.14 release. These changes are consistent with the version in pyproject.toml.

pyproject.toml (4)

8-8: LGTM! Version correctly bumped to 0.1.14.

This aligns with the version constants in cog/version_info.py.


12-12: Python version requirement expanded to support 3.12.

The requires-python constraint has been relaxed from an exact pin == 3.11.* to a range >=3.11, <3.13, enabling Python 3.12 support. This is a significant change that should be documented in the "New developer features in 0.1.14" or "Breaking changes in 0.1.14" section of RELEASE-NOTES-0.1.md.


45-45: LGTM! Python 3.12 classifier added.

This correctly reflects the expanded Python support defined in requires-python.


60-62: LGTM! Dev dependencies updated.

The updates to black (25.11.0 → 25.12.0) and pytest (9.0.1 → 9.0.2) are minor version bumps. These changes should be documented in the "Changed development-only external dependencies in 0.1.14" section of RELEASE-NOTES-0.1.md.

@winstonsung winstonsung linked an issue Jan 10, 2026 that may be closed by this pull request
@winstonsung winstonsung force-pushed the REL0_1 branch 2 times, most recently from 2a20a48 to 103528e Compare January 10, 2026 13:38
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/unittest.yml (1)

27-30: Use unittest discovery; passing file paths via git ls-files is brittle.

python -m unittest is designed around module names / discovery; file-path arguments commonly misbehave. Prefer discover per directory (and it won’t accidentally change behavior when a glob matches nothing).

Proposed fix (unittest discovery)
       - name: Analysing the code with Python unittest
         run: |
-          python -m unittest $(git ls-files 'cog/tests/*.py')
-          python -m unittest $(git ls-files 'tests/unittest/*.py')
+          python -m unittest discover -s cog/tests -p "*.py"
+          python -m unittest discover -s tests/unittest -p "*.py"
🤖 Fix all issues with AI agents
In @.github/workflows/dependencies.yml:
- Around line 16-22: Replace the fragile branch-name checkout in the fork-PR
block: in the actions/checkout@v6 step that currently uses ref: ${{
github.event.pull_request.head.ref }}, change it to ref: ${{
github.event.pull_request.head.sha }} so the workflow checks out the exact
commit SHA for forked pull requests (leave the if condition and the uses:
actions/checkout@v6 line intact).

In @.github/workflows/unittest.yml:
- Around line 23-26: The workflow currently runs "uv pip sync pylock.toml" then
"uv pip install -e .[dev]" which can bypass the lock; instead regenerate the
lock to include the dev extras and only sync from it: run the appropriate
uviant/uv command that creates a pylock.toml including the dev group (e.g. "uv
lock -e dev" or equivalent in your project) and then keep only "uv pip sync
pylock.toml" in the job, removing the separate "uv pip install -e .[dev]" step
so all dev transitive deps are installed strictly from the lock.

In @RELEASE-NOTES-0.1.md:
- Around line 123-206: Update the "SCAICT-uwu 0.1.14" section in
RELEASE-NOTES-0.1.md by replacing the placeholder lines "* …" with concrete
entries: under "New developer features in 0.1.14" add "Added Python 3.12
support", "Introduced UV-based dependency management", "Added pylock.toml
lockfile for dependency locking", and "Updated project.classifiers to include
Python 3.12"; under "Changed development-only external dependencies in 0.1.14"
list "Updated astroid from 4.0.2 to 4.0.3", "Updated black from 25.11.0 to
25.12.0", "Updated pathspec from 0.12.1 to 1.0.3", "Updated platformdirs from
4.5.0 to 4.5.1", and "Updated pytest from 9.0.1 to 9.0.2"; ensure all other
placeholder sections are either populated similarly or removed if not applicable
and keep the formatting consistent with the rest of the release notes.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ea32189 and 10ea14f.

📒 Files selected for processing (11)
  • .github/workflows/black.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/scaict_uwu/.gitkeep
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • pylock.toml
  • requirements.txt
  • pyproject.toml
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
🔇 Additional comments (14)
.github/workflows/pylint.yml (2)

14-14: LGTM! Python 3.12 added to test matrix.

Excellent expansion of test coverage to include Python 3.12! This aligns purrfectly with the pyproject.toml changes.


21-25: No issues found with the UV dependency sync configuration.

The pylock.toml lockfile exists in the repository, and uv pip sync pylock.toml is the correct syntax. UV's pip sync subcommand supports PEP 751 lockfiles directly, so the workflow configuration is valid and properly formatted.

Likely an incorrect or invalid review comment.

pyproject.toml (3)

8-8: LGTM! Version bumped to 0.1.14.

Version number correctly updated. This matches the changes in cog/version_info.py.


60-62: LGTM! Development dependencies updated.

Minor version bumps for black and pytest. These changes align with requirements_dev.txt.


12-12: Python 3.12 support is properly configured and dependencies are compatible.

All runtime dependencies support Python 3.12: flask 3.1.2 (requires ≥3.9), mysql-connector-python 9.5.0, py-cord 2.6.1, python-dotenv 1.2.1, and requests 2.32.5 each declare Python 3.12 support. The requires-python range ">=3.11, <3.13" and classifier additions are correct.

cog/version_info.py (1)

14-14: LGTM! Version metadata updated correctly.

The version number and date constants are properly updated to reflect the 0.1.14 release. The date "2026-01-10 (UTC)" matches the PR creation date.

Also applies to: 19-19

requirements_dev.txt (3)

1-2: LGTM! Minor version bumps for dev dependencies.

The updates for astroid, black, platformdirs, and pytest are minor version bumps that align with pyproject.toml.

Also applies to: 11-11, 15-15


13-13: Remove pygments and pytokens from requirements_dev.txt—they're transitive dependencies.

Both packages are pulled in automatically: pygments by pytest (>=2.7.2) and pytokens by black (>=0.3.0). Explicitly pinning transitive dependencies can cause version conflicts and maintenance friction. Since these aren't directly imported anywhere in the codebase, let pip resolve them through the tools that actually need them.


10-10: No action needed—pathspec 1.0.3 is compatible with black.

While the major version bump merits attention, Black explicitly declares pathspec>=0.9.0 with no upper bound, confirming support for version 1.0.x. The internal API breaking changes in 1.0.0 (removal of _match_file(), pattern renaming) don't affect Black's usage of the public API, and any Black-specific issues were fixed in 1.0.1. Version 1.0.3 is safe to use.

requirements.txt (1)

1-24: Pins look consistent and remain alphabetically ordered; verify availability/security for the new versions.

Ordering is preserved (nice), but since this is a dependencies/security PR, please verify the bumped pins exist on PyPI and that there are no newly-introduced advisories affecting the chosen versions. Based on learnings, keep requirements.txt alphabetical.

.github/workflows/dependencies.yml (1)

26-31: [Rewritten review comment]
[Classification tag]

pylock.toml (1)

19-25: Lockfile appears cp312-specific, but verification requires repository access.

Without access to the codebase, I cannot confirm whether pylock.toml includes cp311-compatible wheels or if separate lockfiles exist. Verify: (1) does the lockfile contain cp311 wheels for aiohttp, black, frozenlist, yarl? (2) does CI actually run both Python 3.11 and 3.12? If cp311 compatibility is needed but missing, either generate multi-interpreter lock artifacts or maintain per-interpreter locks like pylock.py311.toml / pylock.py312.toml (PEP 751 allows this).

.github/workflows/black.yml (1)

26-31: Black workflow (Python 3.11) may not be able to install from a cp312-oriented pylock.toml.

The provided pylock.toml snippet includes Python-tagged wheels (e.g., cp312); if black (or any dependency) is locked only to cp312 artifacts, this 3.11 job will fail during uv pip sync. Also, please confirm astral-sh/setup-uv@v5 is intentionally pinned to that major version.

.github/workflows/unittest.yml (1)

14-26: Ensure uv targets the matrix Python version.

The astral-sh/setup-uv action supports a python-version input that directs uv to use the correct interpreter. Add it to prevent uv from defaulting to an incompatible Python version when syncing dependencies:

Proposed fix
       - name: Install uv
         uses: astral-sh/setup-uv@v5
+        with:
+          python-version: ${{ matrix.python-version }}

Verify that pylock.toml contains wheels for both Python 3.11 and 3.12 to avoid sync failures on either matrix leg.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/black.yml (1)

14-14: 🐱 tilts head Why no Python 3.12 here?

This observant cat notices that while pylint.yml and unittest.yml were updated to test against Python 3.12, the Black workflow still only runs on Python 3.11.

For a formatter, this might be intentional since Black's output shouldn't vary by Python version. However, it creates an inconsistency with the other CI workflows.

swishes tail thoughtfully Consider adding "3.12" to maintain consistency, or add a comment explaining why Black only needs 3.11.

🤖 Fix all issues with AI agents
In @.github/workflows/dependencies.yml:
- Around line 26-31: The workflow step "Install dependencies" is installing from
three overlapping sources (requirements.txt, requirements_dev.txt, and .[dev])
and is inconsistent with other workflows that use UV; replace this block to use
UV consistently by running "uv pip sync pylock.toml" (ensure UV is installed
first) or if you must stick with pip remove the redundant source by keeping only
one dev source (either drop "pip install -r requirements_dev.txt" or drop "pip
install -e .[dev]") so you no longer install duplicate/dev extras and match
other workflows' tooling.
- Around line 16-21: Consolidate the two conditional checkout steps into a
single actions/checkout@v6 step: remove the separate "if: github.event_name !=
'pull_request'" and "if: github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.fork == true" steps and replace them with
one checkout step that always runs but sets the ref to pull_request head when
present (use an expression like github.event.pull_request.head.ref ||
github.ref) so the ref parameter is only effectively different for forked PRs.
- Around line 1-31: The workflow "Python dependencies" (job name build, matrix
key python-version) currently only installs packages and lacks a documented
purpose and validations; update the workflow to include a concise top-line
docstring in its name/description and add validation steps such as running pip
check, pip-audit or safety for vulnerability scanning, and optionally a
lightweight import/installation smoke test (e.g., run a simple module import or
pytest -q on a minimal verification file) and extend the matrix to include
"3.12" alongside "3.11" to match pylint.yml and unittest.yml; ensure these
changes are applied to the build job (referencing the steps that run pip install
-r requirements.txt, pip install -r requirements_dev.txt, pip install -e .[dev])
so they execute after installs and fail the job on issues.
- Line 10: The job-level condition "if: github.event_name != 'pull_request' ||
github.event.pull_request.head.repo.fork == true" incorrectly skips same-repo
PRs; remove that line (or replace it with "if: always()") so the job runs for
PRs from the same repository as well as forks and non-PR events; update the
condition in .github/workflows/dependencies.yml where the exact "if:
github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
== true" appears.

In @.github/workflows/unittest.yml:
- Around line 32-33: The workflow invokes a non-existent "unittest" command;
replace those calls so Python's unittest module is run with the Python
interpreter (e.g. use "python -m unittest" in place of "unittest") for both
occurrences that run tests from "$(git ls-files 'cog/tests/*.py')" and "$(git
ls-files 'tests/unittest/*.py')" (i.e., update the two lines with "uv run
unittest ..." to use "uv run python -m unittest ..." so the module is executed
correctly).

In @RELEASE-NOTES-0.1.md:
- Around line 123-206: The release notes currently have placeholders; update the
"New developer features" section to state "Updated: Added Python 3.12 support to
CI/testing" and replace the placeholder entries under "Changed external
dependencies" and "Changed development-only external dependencies" with concrete
"Updated:" lines listing the version bumps: runtime updates - urllib3
2.5.0→2.6.3, certifi 2025.11.12→2026.1.4, aiohttp 3.13.2→3.13.3, pathspec
0.12.1→1.0.2, werkzeug 3.1.4→3.1.5; development updates - platformdirs
4.5.0→4.5.1, pytest 9.0.1→9.0.2, black 25.11.0→25.12.0, astroid 4.0.2→4.0.3,
using the word "Updated" for each line and placing runtime deps under "Changed
external dependencies" and dev deps under "Changed development-only external
dependencies".
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 10ea14f and 103528e.

📒 Files selected for processing (11)
  • .github/workflows/black.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/scaict_uwu/.gitkeep
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • requirements.txt
  • pylock.toml
  • pyproject.toml
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
🔇 Additional comments (12)
requirements.txt (2)

1-24: Alphabetical ordering looks purrfect!

stretches contentedly All dependencies are neatly sorted alphabetically, just as required by the project standards. Nice work maintaining order in the chaos!

Based on learnings, dependencies must be maintained in alphabetical order.


2-2: These dependency updates fix critical security vulnerabilities—merge with confidence 🐱✓

Nice catches! These versions address real CVE fixes:

  • aiohttp 3.13.3: Patches 6 CVEs including zip-bomb DoS (CVE-2025-69223), path-normalization info disclosure (CVE-2025-69226), infinite loops (CVE-2025-69227), memory exhaustion (CVE-2025-69228), CPU blocking (CVE-2025-69229), and cookie logging storms (CVE-2025-69230).
  • urllib3 2.6.3: Patches decompression-bomb via streaming redirects (CVE-2026-21441) and unbounded decompression chains (CVE-2025-66418).
  • werkzeug 3.1.5: Patches Windows device name bypass in safe_join (CVE-2026-21860).
  • certifi 2026.1.4: Routine update; not affected by CVE-2024-39689 (fixed in 2024.07.04+).

All versions exist on PyPI. The "security" label is well-placed.

requirements_dev.txt (2)

1-17: Development dependencies are nicely groomed! 🐱

nods approvingly All dev dependencies maintain perfect alphabetical order. The new additions (pygments and pytokens) are properly positioned too!

Based on learnings, dependencies must be maintained in alphabetical order.


10-10: Pathspec 1.0.3 is compatible with black 25.12.0 😸

Black 25.12.0 explicitly accepts pathspec>=0.9.0, so the major version bump to 1.0.3 poses no compatibility issues. This dependency is safe.

pyproject.toml (3)

8-8: Version bump looks spot on! 🎯

taps paw approvingly Version 0.1.14 is consistent with the updates in cog/version_info.py. Everything's in sync!


12-12: Python 3.12 support added correctly! 🚀

swishes tail excitedly The Python requirement now properly allows both 3.11 and 3.12, and the classifier was added to reflect this. This aligns nicely with the CI workflow updates mentioned in the PR objectives that expand test coverage to Python 3.12!

Also applies to: 45-45


60-62: Dev dependency versions match perfectly!

purrs with satisfaction These versions align exactly with the updates in requirements_dev.txt - black 25.12.0 and pytest 9.0.2. Consistency across the dependency manifests!

cog/version_info.py (1)

14-14: Version constants updated perfectly! 📅

nods with whiskers twitching The version number (0.1.14) and date (2026-01-10 UTC) are consistent with both the PR metadata and pyproject.toml. Everything's synchronized across the codebase!

Also applies to: 19-19

pylock.toml (1)

390-394: Editable install configured correctly! 🛠️

purrs approvingly The scaict-uwu package is properly marked as editable with the correct directory path. This allows for local development without reinstalling the package after changes.

.github/workflows/unittest.yml (1)

14-29: 🐱 purrs Python 3.12 expansion and UV setup look purrfect here too!

The matrix expansion and UV-based dependency management are consistent with the other workflows. The addition of uv pip install -e .[dev] after syncing ensures test dependencies are available.

.github/workflows/black.yml (1)

26-36: 🐱 licks paw UV migration for Black looks clean and correct~

The adoption of UV tooling for the Black formatter workflow is well-executed and consistent with the pattern established in other workflows.

.github/workflows/pylint.yml (1)

14-28: Python 3.12 and UV migration verified ✓

The expansion to Python 3.12 and migration to UV tooling are well-executed. This curious cat confirms that pylock.toml exists and includes pylint (4.0.4) in its dependencies, so the workflow setup is complete and ready to go.

@winstonsung winstonsung force-pushed the REL0_1 branch 3 times, most recently from 2c29630 to da10622 Compare January 10, 2026 14:09
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
RELEASE-NOTES-0.1.md (1)

34-86: Release notes look out-of-sync: 0.1.14 section is empty while “development branch” lists (possibly outdated) dependency versions.
Given this PR is the 0.1.14 release, I’d expect the concrete changes (Python 3.12 in CI, uv/pylock adoption, dependency bumps) to live under 0.1.14, and the “development branch” section to be reset back to placeholders for the next release.

Suggested doc maintenance approach
  • Move the relevant “External dependency changes” bullets from the dev section into ## SCAICT-uwu 0.1.14 and update versions to match the actual pins/lock.
  • Reset the dev section to * … placeholders after the cut.
  • Keep the consistent “Updated …” wording. (Based on learnings, use “Updated” uniformly.)

Also applies to: 123-206

🤖 Fix all issues with AI agents
In @.github/workflows/dependencies.yml:
- Around line 16-31: The "Install dependencies" job currently performs pip
install -r requirements*.txt (the pip-first lines in the Install dependencies
step), which conflicts with other workflows that are lock-first (uv pip sync
pylock.toml); either switch this step to the lock-first approach by replacing
the pip install lines with the uv pip sync pylock.toml flow (and ensure
actions/setup-python remains) or explicitly rename/annotate the job/step (e.g.,
change the step name from "Install dependencies" to "Install from
requirements.txt" and add a comment) to document that this workflow
intentionally validates requirements-first installs; update any README or
workflow description to state which strategy is used.
- Around line 10-22: The job-level condition `if: github.event_name !=
'pull_request' || github.event.pull_request.head.repo.fork == true` currently
skips internal (same-repo) pull requests; decide whether that is intended and if
you want dependency checks for all PRs change the condition to `if:
github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
!= false` (simpler: use `if: github.event_name != 'pull_request' ||
github.event.pull_request.head.repo.fork != true` or remove the
`github.event_name` clause and use `if: github.event.pull_request.head.repo.fork
!= true`) so internal PRs are included, then update the workflow accordingly
where this condition appears.

In @.github/workflows/unittest.yml:
- Around line 32-33: The CI uses shell globs with $(git ls-files ...) when
invoking unittest, which can run zero tests or exceed shell arg limits; change
those commands to use unittest discovery instead (e.g., replace the "uv run
python -m unittest $(git ls-files 'cog/tests/*.py')" and the "uv run python -m
unittest $(git ls-files 'tests/unittest/*.py')" lines with calls that use
"python -m unittest discover" and the appropriate -s (start directory) and -p
(pattern) options so tests are discovered reliably without shell expansion).
- Around line 24-29: Replace the two-step mix of "uv pip sync pylock.toml"
followed by "uv pip install -e .[dev]" with a single reproducible sync: ensure
dev dependencies are present in your lock and call "uv pip sync --all-extras
pylock.toml" if dev is an optional extra (or "uv pip sync pylock.toml" if dev is
in default groups); remove the editable install step from the CI workflow so CI
uses only the lockfile for installs and does not allow unlocked transitive
dependency drift.

In @pyproject.toml:
- Line 12: The pyproject.toml has a mismatch: requires-python = ">=3.12, <3.13"
but the classifiers still list "Programming Language :: Python :: 3.11"; remove
the outdated "Programming Language :: Python :: 3.11" classifier (leave the
"Programming Language :: Python :: 3.12" classifier) so classifiers match the
requires-python constraint, or alternatively update requires-python if you
intend to keep 3.11 support.
- Line 12: Remove the inconsistent Python 3.11 classifier from the package
metadata and align it with the requires-python setting by deleting any
"Programming Language :: Python :: 3.11" entry and ensuring classifiers list
only reflects Python 3.12; update RELEASE-NOTES-0.1.md by adding a concise entry
in the "Breaking changes" section stating the project now requires Python 3.12
(>=3.12, <3.13); and update README.md and README_zh-Hant.md by changing the
environment creation instructions that say "Create an environment in Python
3.11" to clearly state Python 3.12 and, if present, add a short note about the
requirement and compatible range.

In @requirements_dev.txt:
- Line 4: Remove the unused dependency entry "dill == 0.4.0" from
requirements_dev.txt; search the repo for any references to the dill module to
confirm it's unused, delete that line from the file, and regenerate any
dependency lock or freeze output (e.g., pip-tools/poetry lock or
requirements.txt) if your workflow requires updating derived dependency files.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 103528e and 2c29630.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (11)
  • .github/workflows/black.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/scaict_uwu/.gitkeep
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • pylock.toml
  • pyproject.toml
  • requirements.txt
🔇 Additional comments (12)
requirements.txt (2)

1-24: Purr-fect alphabetical ordering! 🐾

The dependencies are correctly sorted alphabetically, as required by project standards. The additions and updates maintain proper ordering.


2-2: Security updates confirmed — packages address multiple known vulnerabilities.

These versions are solid picks, whiskers approve! ✓

  • aiohttp 3.13.3 (Jan 2026) fixes 6 CVEs including memory exhaustion, zip-bomb decompression, infinite loop DoS, chunked-message handling, cookie logging DoS, and Range header parser issues.
  • certifi 2026.1.4 (Jan 2026) is the latest release with no outstanding vulnerabilities; prior CVE-2024-39689 (GLOBALTRUST roots) was patched in 2024.7.4.
  • urllib3 2.6.3 fixes CVE-2026-21441 (high-severity decompression-bomb bypass safeguard bypass).
  • werkzeug 3.1.5 (Jan 2026) fixes CVE-2026-21860 (medium severity: Windows safe_join() device name blocking).

All versions are current and address known vulnerabilities.

.github/workflows/pylint.yml (1)

14-14: Python 3.12 upgrade confirmed! 🐱

The Python version update to 3.12 aligns with the changes in pyproject.toml. This meow-velous upgrade keeps the project current!

requirements_dev.txt (1)

1-17: Alphabetical order maintained paw-fectly! 🐾

All development dependencies are correctly sorted alphabetically, including the new additions of pygments and pytokens.

.github/workflows/black.yml (1)

14-14: Consistent UV migration across workflows! 🎯

The Black workflow updates mirror the changes in pylint.yml:

  • Python 3.12 upgrade
  • UV tooling adoption
  • Lockfile-based dependency management

The migration is consistent and well-executed. Same optional consideration applies: testing only Python 3.12 provides less coverage than a multi-version matrix.

Also applies to: 26-36

pyproject.toml (2)

8-8: Version bump to 0.1.14 looks good! 📦

The version increment follows semantic versioning appropriately.


60-62: Dev dependency updates match requirements_dev.txt! ✨

The updates to black and pytest in optional-dependencies.dev are consistent with the versions specified in requirements_dev.txt.

cog/version_info.py (1)

13-20: Version constants bump is consistent with the 0.1.14 release.
No functional concerns here.

.github/workflows/unittest.yml (1)

14-22: GitHub Action versions are current. Both actions/checkout@v6 and actions/setup-python@v6 exist and are the latest major versions—the workflow will not fail due to version unavailability. If dropping Python 3.11 from the test matrix was intentional for version 0.1.14, no changes are needed here.

pylock.toml (2)

1-3: No compatibility concern here — uv pip sync fully supports PEP 751 pylock.toml files.

The lock-version = "1.0" and created-by = "pip" headers are the standard PEP 751 format (finalized March 2025). uv pip sync pylock.toml reads these files directly without issues. pip generates this format via pip lock (25.1+), and the ecosystem adoption is active. CI and local installs will work as expected.


15-449: Lockfile is correctly platform-specific per PEP 751; if multi-platform support is needed, generate separate pylock files per platform.

This pylock.toml is generated for Linux cp312 amd64 and is working as intended under PEP 751—lockfiles are platform-specific by design. Note that most entries (~30/40) are actually universal pure-Python wheels; only 9 are cp312+manylinux-specific.

If the project must support macOS/Windows/aarch64, the standard approach is to generate and commit separate files (e.g., pylock.linux-x86_64.toml, pylock.macos-arm64.toml, pylock.windows-amd64.toml) by running the lock tool on each target platform, or use PEP 751 environment markers if your tooling supports multi-platform emission.

Clarify in docs/CI which platforms are supported and which pylock file(s) apply to each.

Likely an incorrect or invalid review comment.

.github/workflows/dependencies.yml (1)

17-25: No action needed. Both actions/checkout@v6 (v6.0.2, released January 9, 2026) and actions/setup-python@v6 (v6.1.0, released November 25, 2025) exist and are actively maintained as of January 2026.

@winstonsung winstonsung force-pushed the REL0_1 branch 3 times, most recently from 68d529d to 5dee5e8 Compare January 10, 2026 14:17
@winstonsung winstonsung force-pushed the REL0_1 branch 3 times, most recently from ce21b54 to 4605a8e Compare January 10, 2026 14:24
@winstonsung winstonsung force-pushed the REL0_1 branch 2 times, most recently from 6c34f28 to 33c8ca8 Compare January 10, 2026 14:37
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In @requirements_dev.txt:
- Line 13: Remove the unused dev dependencies by deleting the lines for
"pygments == 2.19.2" and "pytokens == 0.3.0" from requirements_dev.txt; if
either package was intentionally added for a specific workflow, replace the
deletion with a short comment or commit message explaining its purpose and keep
only the one that is actually required.

In @requirements.txt:
- Line 2: Remove the unused typing-extensions dependency from requirements.txt
by deleting the line containing "typing-extensions == 4.15.0"; confirm the
project targets Python 3.12+ so no typing-extensions features are needed, and
re-check that the remaining entries (e.g., "aiohttp == 3.13.3") remain
alphabetically ordered and that no import in the codebase references
typing_extensions.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2c29630 and 6c34f28.

📒 Files selected for processing (12)
  • .github/workflows/black.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • .gitignore
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/scaict_uwu/.gitkeep
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • pyproject.toml
  • pylock.toml
  • requirements.txt
🔇 Additional comments (21)
.gitignore (1)

16-17: Purr-fect addition for UV tooling.

The new uv.lock ignore entry aligns nicely with the PR's shift to UV-based dependency management in CI workflows. Clean and minimal—exactly what a good .gitignore entry should be.

pyproject.toml (4)

8-8: Version bump looks good! 🐾

The version update to 0.1.14 aligns perfectly with the PR title and release process.


44-44: Classifier update aligns with Python version requirement.

This change is consistent with the requires-python update at Line 12. However, this approval is contingent on verifying that dropping Python 3.11 support is intentional.


59-61: Dev dependency updates look good! 🐱

The black and pytest updates are minor version bumps that align with the PR objectives.


12-12: Hold on, Meow - the pyproject.toml file is brand new! 😺

This is the initial creation of pyproject.toml, not a change from a previous Python 3.11 requirement. The requires-python = ">=3.12, <3.13" constraint is being set for the first time, so there's no breaking change from 3.11 to drop.

If the project previously supported Python 3.11 via other configuration files, you may want to align pyproject.toml accordingly, but that's a separate consideration from what this diff shows.

Likely an incorrect or invalid review comment.

.github/workflows/unittest.yml (3)

14-14: Python version updated to 3.12 in test matrix.

This change aligns with the requires-python update in pyproject.toml. The approval is contingent on confirming that dropping Python 3.11 is intentional.


21-28: UV tooling integration looks purrfect! 🐾

The migration to UV with pylock.toml-based dependency management will provide deterministic, reproducible builds.


31-31: Test invocation properly wrapped with UV.

The unittest command correctly uses uv run to execute within the managed environment.

pylock.toml (3)

1-3: Lockfile metadata looks standard.

The lock-version and created-by fields follow expected conventions.


1-449: Lockfile structure is comprehensive and well-formed! 📦

The pylock.toml includes proper metadata, exact versions, wheel URLs, and SHA256 hashes for all dependencies. The editable local package reference is correctly configured. However, this approval is contingent on resolving the pathspec version discrepancy noted above.


269-277: No issue found here. The pathspec version in pylock.toml (0.12.1) matches requirements_dev.txt and is consistent across the lockfile. Without evidence that the PR summary mentions updating pathspec to 1.0.2, there's no discrepancy to address.

Likely an incorrect or invalid review comment.

.github/workflows/pylint.yml (3)

14-14: Python version updated consistently across CI.

The pylint workflow now uses Python 3.12, matching unittest.yml and pyproject.toml requirements.


21-28: UV integration mirrors unittest workflow - consistency is key! 🔑

The UV tooling setup follows the same pattern as unittest.yml, ensuring consistent dependency management across CI jobs.


31-31: Pylint command properly integrated with UV.

The pylint invocation correctly uses uv run to execute within the managed environment.

.github/workflows/black.yml (6)

26-30: LGTM! UV setup looks good.

Meow 🐱 The UV installation and virtual environment setup follow the standard pattern for the astral-sh/setup-uv action.


36-36: LGTM! Black execution through UV is correct.

Nods approvingly 🐱 Running Black via uv run ensures it executes within the UV-managed virtual environment, maintaining consistency with the new tooling approach.


41-41: LGTM! Suppressing ignored file warnings.

Thoughtful tail swish 🐱 This configuration prevents Git from warning about ignored files during the add operation, which is sensible given the broad git add * command used below.


47-47: LGTM! Defensive error handling added.

Cautious paws 🐱 Adding || true prevents the workflow from failing if git add encounters issues (e.g., when no files need formatting). This is appropriate since the subsequent git diff-index step will handle the actual commit logic.


33-33: All dependencies are properly configured. 🐱

The pylock.toml file exists and includes Black (v25.12.0), and uv pip sync is a documented uv command that fully supports syncing from lock files. No action needed here—the workflow is good to go.


14-14: No compatibility concerns — Python 3.12 is already the project's sole supported version.

Black 25.12.0 fully supports Python 3.12 (the wheel is explicitly built for cp312), and the project's pyproject.toml already specifies requires-python = ">=3.12, <3.13". The workflow correctly enforces this constraint. All dev dependencies (black, pylint, pytest) support Python 3.12. The change is safe. 🐱

cog/version_info.py (1)

14-19: LGTM! Version metadata correctly updated.

Satisfied purr 🐱 The version number and date have been properly bumped to reflect the 0.1.14 release. The date aligns with the PR creation timestamp, maintaining consistency across the release.

YuevUwU

This comment was marked as spam.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🤖 Fix all issues with AI agents
In @.github/workflows/black.yml:
- Around line 41-47: The current step uses the brittle command "git add * ||
true" which misses dotfiles, can break on special characters, and masks real
errors; replace that invocation with a robust add such as "git add -A" (or "git
add .") and remove the "|| true" so failures surface, updating the workflow step
that currently contains the "git add * || true" line to use the new command and
exit non-zero on real errors.

In @.github/workflows/dependencies.yml:
- Around line 16-21: The two conditional checkout steps using
"actions/checkout@v6" with "if: github.event_name != 'pull_request'" and "if:
github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork
== true" are redundant; replace them with a single unconditional checkout step
using actions/checkout@v6 (remove both conditional blocks and the extra with:
ref override) so the workflow relies on GitHub Actions' default ref resolution
for PRs and pushes.
- Line 10: The workflow conditional `if: github.event_name != 'pull_request' ||
github.event.pull_request.head.repo.fork == true` incorrectly skips same-repo
pull requests; update the conditional to reflect intended behavior — either
remove the `if:` line entirely to run on all events, or replace it with an
explicit condition (for example, remove the `github.event_name !=
'pull_request'` clause so PRs from the same repo are included or change the
logic to `github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.fork == true` if you truly only want fork
PRs) and ensure the updated expression appears where the current `if:` is
declared in the workflow.
- Around line 26-31: The workflow step "Install dependencies" installs
dependencies redundantly from requirements.txt, requirements_dev.txt and using
the .[dev] extras (which expects optional-dependencies), but the project now
uses PEP 735 dependency-groups; replace this step to align with black.yml by
using the same uv setup and "uv pip sync pylock.toml" flow (or, alternatively,
install from a single lockfile) instead of pip installing all three sources and
remove the .[dev] extras usage; update the workflow's Install dependencies step
to call the uv bootstrap/setup and then run "uv pip sync pylock.toml" (or an
equivalent single-source install), ensuring pyproject.toml dependency-groups are
used consistently across workflows.

In @main.py:
- Around line 25-40: The load and unload command handlers (load and unload) call
bot.load_extension and bot.unload_extension without catching errors; wrap each
call in a try/except Exception as e block, call
bot.load_extension/unload_extension inside the try, and on exception send an
ephemeral error response (e.g., await ctx.respond(f"Error loading {extension}:
{type(e).__name__}: {e}", ephemeral=True)) and optionally log the exception; on
success keep the existing success message.

In @pyproject.toml:
- Line 12: Update the "Breaking changes in 0.1.14" section in
RELEASE-NOTES-0.1.md to document the Python requirement change: state that
requires-python was tightened to ">=3.12, <3.13", that support for Python 3.11
and earlier is dropped, and note that CI now tests only 3.12; include a short
recommended action for users (upgrade to Python 3.12, check dependency
compatibility) and any relevant migration notes so consumers understand and can
prepare for the breaking change.

In @RELEASE-NOTES-0.1.md:
- Around line 123-206: The 0.1.14 release notes are placeholders; replace the
"…" entries under the 0.1.14 heading with the actual items from the PR: under
"Breaking changes in 0.1.14" add "Updated Python requirement from 3.11 to 3.12";
under "Changed external dependencies in 0.1.14" list each dependency update
using the word "Updated" (platformdirs 4.5.0 → 4.5.1, urllib3 2.5.0 → 2.6.3,
certifi 2025.11.12 → 2026.1.4, werkzeug 3.1.4 → 3.1.5, aiohttp 3.13.2 → 3.13.3,
astroid 4.0.2 → 4.0.3, pathspec 0.12.1 → 1.0.2); under "Changed development-only
external dependencies in 0.1.14" list black 25.11.0 → 25.12.0 and pytest 9.0.1 →
9.0.2 as "Updated"; under "New developer features in 0.1.14" add the three
bullets (Python 3.12 CI, migration to uv-based dependency management,
dependency-check workflow); remove placeholder bullets and ensure wording uses
"Updated" consistently for dependency changes.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 30ae7bf and b714648.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (12)
  • .github/workflows/black.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/pylint.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • main.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/.gitkeep
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • pyproject.toml
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
📚 Learning: 2024-12-01T20:46:08.466Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: src/scaict_uwu/core/config/config_factory.py:4-5
Timestamp: 2024-12-01T20:46:08.466Z
Learning: Python code in this repository is formatted using the Black formatter. Code reviews should respect Black's formatting output and avoid suggesting changes that contradict it.

Applied to files:

  • .github/workflows/black.yml
🪛 Ruff (0.14.10)
main.py

28-28: String contains ambiguous (FULLWIDTH EXCLAMATION MARK). Did you mean ! (EXCLAMATION MARK)?

(RUF001)


37-37: String contains ambiguous (FULLWIDTH EXCLAMATION MARK). Did you mean ! (EXCLAMATION MARK)?

(RUF001)

🔇 Additional comments (13)
main.py (2)

27-29: Excellent security improvement! 🐱

The administrator permission check prevents unauthorized users from loading cogs. The ephemeral response is a nice UX touch.

Note: The static analysis tool flagged the fullwidth exclamation mark (!), but this is actually correct for Chinese typography. No changes needed here.


36-38: Consistent permission check for unload command. 🐱

Good job mirroring the same security pattern from the load command.

.github/workflows/unittest.yml (1)

14-14: LGTM! Consistent migration to uv and Python 3.12. 🐱

The unittest workflow follows the same clean migration pattern as the pylint workflow. The use of uv run python -m unittest with git ls-files is appropriate.

Also applies to: 21-31

.github/workflows/pylint.yml (1)

14-14: LGTM! Clean migration to uv and Python 3.12.

The workflow updates are solid. The shift from pip to uv with pylock.toml for deterministic builds is a sharp move. ✓ pylock.toml is present and properly referenced in the workflow.

requirements.txt (2)

21-21: No issue with this version.

The version 4.15.0 is the current latest release of typing-extensions on PyPI, so this requirement is perfectly valid.


2-2: All security-critical dependencies are verified and secure.

The updated versions for aiohttp (3.13.3), certifi (2026.1.4), urllib3 (2.6.3), and werkzeug (3.1.5) all exist on PyPI with no known vulnerabilities in the OSV database. The certifi version update brings fresh certificate bundles aligned with January 2026. These are all legitimate, stable releases from maintained packages.

requirements_dev.txt (1)

1-16: All dev dependency versions are valid. All packages and versions in requirements_dev.txt exist on PyPI, including the versions that appeared unusually high (black 25.12.0, pytest 9.0.2, pathspec 0.12.1, and pygments 2.19.2). No action needed.

Likely an incorrect or invalid review comment.

pyproject.toml (2)

8-8: Version bump looks correct! 🐱

The version number is updated to 0.1.14 and matches the PR title and version constants in cog/version_info.py.


58-64: The dependency-groups migration to PEP 735 format looks pawsome! 😸

However, there's a small clarification: these are the initial versions being set in the pyproject.toml, not updates from prior versions. The versions have been confirmed to exist on PyPI:

  • black 25.12.0 ✓
  • pytest 9.0.2 ✓
  • pylint 4.0.4 ✓

The migration to dependency-groups from the older optional-dependencies approach is a solid modernization choice for the project configuration.

Likely an incorrect or invalid review comment.

.github/workflows/black.yml (3)

14-14: Python version update looks good! 😸

The matrix version is updated to 3.12, consistent with the requires-python change in pyproject.toml. This ensures CI runs on the correct Python version.


26-30: Nice upgrade to uv! 🐱✨

Adding uv (astral-sh/setup-uv@v5) modernizes the Python tooling and should significantly speed up dependency installation. The venv setup is straightforward and correct.


33-33: No issue here - pylock.toml exists and is properly configured 😸

The lockfile is present in the repository and correctly generated by uv. Line 33 of the workflow properly references it. This cat was caught chasing shadows.

Likely an incorrect or invalid review comment.

cog/version_info.py (1)

14-19: Version constants updated correctly! 😸✨

Both version constants are properly updated:

  • _SCAICT_UWU_VERSION_NUMBER: "0.1.14" matches pyproject.toml
  • _SCAICT_UWU_VERSION_DATE: "2026-01-10 (UTC)" matches the PR creation date

These will be displayed by the /version_info Discord slash command.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🤖 Fix all issues with AI agents
In @.github/workflows/pylint.yml:
- Around line 12-14: The workflow uses a matrix strategy with a single entry
("python-version: [\"3.12\"]") which is redundant; simplify by removing the
matrix block and set python-version directly in the job(s) that use it (replace
uses of strategy.matrix.python-version with a plain python-version key), e.g.,
remove the strategy: matrix: python-version array and add python-version: "3.12"
under the job's steps or the setup-python action invocation (look for references
to strategy.matrix.python-version and the matrix block to update).

In @.github/workflows/sync_dependencies.yml:
- Around line 46-47: Replace the history-rewriting command using `git commit
--amend --no-edit && git push --force-with-lease` with a non-destructive
workflow: create a new commit (drop `--amend`) and push normally (drop
`--force-with-lease`), and add a `[skip ci]` marker to the commit message to
avoid CI loops; optionally guard the step to only run on protected branches like
`main` to prevent unexpected changes on contributor branches.
- Line 44: The workflow uses a risky wildcard in the command "git add * || true"
which can stage unintended files; replace that invocation with explicit adds for
only the generated artifact files (reference the existing generated filenames or
output directory used by the sync step) and remove the blanket "|| true" so
failures surface; ensure you list each generated file/path explicitly (or a
restrictive directory) in place of the wildcard so only intended files are
staged.
- Around line 3-6: The workflow currently triggers on both pull_request and push
which causes the commit/push step to fail for forked-PRs because their
GITHUB_TOKEN is read-only; either remove the pull_request trigger from the
top-level "on:" list, or keep pull_request but guard the commit/push step with a
conditional to skip pushes from forks (e.g. add if: github.event_name !=
'pull_request' or if: github.event.pull_request.head.repo.full_name ==
github.repository to the step that performs the git commit/push), or
alternatively document that external contributors must sync dependencies
manually.

In @.github/workflows/unittest.yml:
- Around line 12-14: The workflow matrix currently defines python-version:
["3.12"] which is unnecessary for a single entry; simplify the job by replacing
the matrix strategy with a direct python-version specification (remove the
strategy.matrix block and set the job's python-version to "3.12" like in
pylint.yml) so the workflow is clearer and consistent.

In @pylock.toml:
- Line 5: The requires-python constraint "==3.12.*" is too strict and will
prevent running on future patch/minor Python releases; update the
requires-python value in the pylock.toml from "==3.12.*" to a broader range such
as ">=3.12,<3.13" (to pin to the 3.12 series) or ">=3.12" (to allow newer
majors), then regenerate your lock/metadata so the new constraint is applied.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b714648 and 149e82d.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (13)
  • .github/dependabot.yml
  • .github/workflows/black.yml
  • .github/workflows/pylint.yml
  • .github/workflows/sync_dependencies.yml
  • .github/workflows/unittest.yml
  • RELEASE-NOTES-0.1.md
  • cog/version_info.py
  • main.py
  • pylock.toml
  • pyproject.toml
  • requirements.txt
  • requirements_dev.txt
  • src/.gitkeep
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2025-01-16T12:22:41.103Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: requirements.txt:0-0
Timestamp: 2025-01-16T12:22:41.103Z
Learning: In requirements.txt, dependencies must be maintained in alphabetical order.

Applied to files:

  • requirements_dev.txt
  • requirements.txt
  • pyproject.toml
📚 Learning: 2024-07-27T07:19:15.090Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 45
File: cog/game.py:22-28
Timestamp: 2024-07-27T07:19:15.090Z
Learning: When suggesting error handling for SQL operations in the `cog/game.py` file, ensure to include a try-except block around the SQL operations.

Applied to files:

  • main.py
📚 Learning: 2024-07-27T07:19:15.090Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 45
File: cog/comment.py:186-251
Timestamp: 2024-07-27T07:19:15.090Z
Learning: When suggesting error handling for SQL operations in the `cog/comment.py` file, ensure to include a try-except block around the SQL operations.

Applied to files:

  • main.py
📚 Learning: 2024-12-01T20:46:08.466Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: src/scaict_uwu/core/config/config_factory.py:4-5
Timestamp: 2024-12-01T20:46:08.466Z
Learning: Python code in this repository is formatted using the Black formatter. Code reviews should respect Black's formatting output and avoid suggesting changes that contradict it.

Applied to files:

  • .github/workflows/black.yml
📚 Learning: 2025-06-27T08:02:10.481Z
Learnt from: winstonsung
Repo: SCAICT/SCAICT-uwu PR: 147
File: RELEASE-NOTES-0.2.md:48-70
Timestamp: 2025-06-27T08:02:10.481Z
Learning: In RELEASE-NOTES files, the project uses a unified format with "Updated" for all dependency version changes rather than varying the language with terms like "Upgraded" or "Bumped".

Applied to files:

  • RELEASE-NOTES-0.1.md
🪛 Ruff (0.14.10)
main.py

28-28: String contains ambiguous (FULLWIDTH EXCLAMATION MARK). Did you mean ! (EXCLAMATION MARK)?

(RUF001)


37-37: String contains ambiguous (FULLWIDTH EXCLAMATION MARK). Did you mean ! (EXCLAMATION MARK)?

(RUF001)

🔇 Additional comments (16)
main.py (2)

27-29: Purr-fect security enhancement! 🐱

The administrator permission check correctly restricts extension management to authorized users. The ephemeral response and early return prevent both unauthorized access and message spam.


28-28: Static analysis false positive on Chinese punctuation.

The Ruff warning about the fullwidth exclamation mark (!) is a false positive. Fullwidth punctuation is the correct and standard form for Chinese text. The warning can be safely ignored or suppressed for Chinese strings.

Also applies to: 37-37

.github/workflows/black.yml (2)

14-14: Nice migration to Python 3.12 and uv tooling! 🐾

The workflow updates are well-structured and consistent with the PR's migration strategy. The uv-based dependency management should provide faster and more reliable installs.

Also applies to: 26-36


33-33: The lockfile reference is correct.

The repository contains both pylock.toml and uv.lock files, and uv pip sync pylock.toml is a valid, documented uv command. The pylock.toml file is the PEP-751 standardized format, intentionally supported by uv for interoperability purposes. No changes needed.

pyproject.toml (3)

8-8: Version bump and Python upgrade look good! 😺

The project version, Python requirement, and classifier are consistently updated to reflect 0.1.14 and Python 3.12 support.

Also applies to: 12-12, 44-44


12-12: Note: Python version constraint is more flexible.

The new constraint >=3.12, <3.13 allows any Python 3.12.x version, whereas the previous == 3.11.* was more restrictive. This is generally good for compatibility, but ensure this flexibility is intentional and that the codebase doesn't rely on specific 3.12 patch-level features.


57-62: Modern dependency-groups syntax! 🎯

The migration from optional-dependencies to dependency-groups aligns with PEP 735 and improves the project's dependency management structure.

requirements_dev.txt (1)

1-83: Excellent hash-pinned dependency management! 🔒

The auto-generated requirements file with SHA256 hashes provides strong supply-chain security and reproducible builds. The dependencies are correctly alphabetized and the platform markers ensure proper cross-platform compatibility.

This file should remain auto-generated by uv tooling and not be manually edited.

.github/dependabot.yml (1)

10-10: "uv" is officially supported by Dependabot.

GitHub Dependabot added official support for the "uv" package ecosystem, with version updates available as of March 2025 and security alerts as of December 2025. The code is correct.

.github/workflows/pylint.yml (2)

21-28: Excellent migration to uv package manager! 🐱

The workflow now uses uv for dependency management, which provides faster installs and better reproducibility through the pylock.toml lockfile. The integration looks clean and follows uv best practices.


14-14: Workflow aligns with project Python 3.12 requirement.

The pyproject.toml already specifies requires-python = ">=3.12, <3.13", so the workflow restriction to Python 3.12 mirrors the project's existing configuration. No Python 3.11-specific code patterns or deprecated features were detected in the codebase, confirming compatibility.

.github/workflows/unittest.yml (1)

21-31: Meow-velous consistency with pylint workflow! 🐈

The unittest workflow follows the same uv-based pattern as the pylint workflow, which provides good consistency across CI/CD. The migration to uv pip sync pylock.toml and uv run is well-executed.

Note: The test pattern has been consolidated to cog/tests/*.py which appears to be an intentional restructuring of the test directory layout.

cog/version_info.py (1)

14-19: Version bump looks paw-some! 🐾

The version has been correctly incremented from 0.1.13 to 0.1.14, and the date has been updated to 2026-01-10 (UTC), which matches the PR creation date. The changes are consistent with the release notes and PR objectives.

pylock.toml (1)

1-428: Lockfile structure and maintenance verified! 😺

The pylock.toml lockfile is excellent for reproducibility:

  • Exact version pins with SHA256 hashes for supply-chain security
  • Platform-specific wheel metadata
  • Clear autogeneration markers

The sync_dependencies.yml workflow exists and handles lockfile updates. The pyproject.toml uses standard [project] and [dependency-groups] format (PEP 508/735), which is fully compatible with uv—no explicit [tool.uv] configuration needed. The setup ensures consistent dependency resolution across environments.

requirements.txt (1)

1-225: Hash-pinned dependencies and security posture are purr-fect!

The alphabetical ordering is maintained correctly. More importantly, the recent package versions selected are security-conscious choices:

  • certifi 2026.1.4: Current CA bundle release (Jan 4, 2026)
  • urllib3 2.6.3: Includes fixes for DoS vulnerabilities (CVE-2025-66418, CVE-2025-66471)
  • werkzeug 3.1.5: Security patch release (Jan 8, 2026) addressing safe_join device handling and multipart parser edge cases
  • aiohttp 3.13.3: Security release (Jan 3, 2026) fixing multiple DoS and resource exhaustion vulnerabilities

The uv-generated hash pinning combined with these security-aware version selections strengthens supply-chain security and reproducibility nicely.

.github/workflows/sync_dependencies.yml (1)

26-33: Check the workflow logic: validate then sync? 🤔

The workflow first checks if uv.lock is in-sync (line 28) with --locked, which will fail if out of sync. But then it tries to sync dependencies (lines 30-33).

If the lock check fails, the workflow stops before syncing. This means:

  • Contributors must manually sync before pushing
  • OR the check at line 28 should be removed to allow auto-sync

Which behavior do you want?

  • Validation-only: Keep line 28, remove lines 30-47 (just check, don't fix)
  • Auto-sync: Remove line 28 (just sync automatically)

Purrs thoughtfully 🐱

@winstonsung winstonsung force-pushed the REL0_1 branch 2 times, most recently from dc1766b to 7180fab Compare January 10, 2026 16:26
@winstonsung winstonsung force-pushed the REL0_1 branch 3 times, most recently from 6b7a2cf to 3f957d0 Compare January 10, 2026 16:41
Change-Id: I0ed50156553e78fb3e6adb2d796d63151e7011f9
@YuevUwU
Copy link
Collaborator

YuevUwU commented Jan 10, 2026

eh? why github-actions will close it?

@winstonsung
Copy link
Collaborator Author

Emmm... the CI exploded again.

@YuevUwU
Copy link
Collaborator

YuevUwU commented Jan 10, 2026

@winstonsung git reflog plz

@winstonsung
Copy link
Collaborator Author

Bruh.

@winstonsung
Copy link
Collaborator Author

Nothing more can do. Never happened on Gerrit.

@winstonsung winstonsung changed the title Version 0.1.14 [Abandoned] Jan 10, 2026
@winstonsung winstonsung removed their assignment Jan 10, 2026
@winstonsung winstonsung removed this from the 0.1.14 milestone Jan 10, 2026
@winstonsung winstonsung removed a link to an issue Jan 10, 2026
@winstonsung winstonsung removed enhancement New feature or request dependencies Pull requests that update a dependency file security labels Jan 10, 2026
@YuevUwU
Copy link
Collaborator

YuevUwU commented Jan 10, 2026

Re-opened on #366

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants