Skip to content

Comments

Hotfix: Rich _unicode_data missing#1015

Open
spoorcc wants to merge 3 commits intomainfrom
spoorcc/issue1014
Open

Hotfix: Rich _unicode_data missing#1015
spoorcc wants to merge 3 commits intomainfrom
spoorcc/issue1014

Conversation

@spoorcc
Copy link
Contributor

@spoorcc spoorcc commented Feb 23, 2026

Summary by CodeRabbit

  • Bug Fixes

    • Fixed missing unicode data in standalone binaries (release 0.12.1).
  • Documentation

    • Updated release/version references and installation example to 0.12.1.
  • Tests

    • Updated test expectations and feature scenarios to reflect version 0.12.1.
  • Chores

    • CI workflows and test-binary steps updated to run additional patch/format actions.
  • Miscellaneous

    • Updated recorded terminal examples and SBOM metadata to reference 0.12.1.

@coderabbitai
Copy link

coderabbitai bot commented Feb 23, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Bumps release to 0.12.1, updates CHANGELOG and package version, adds Rich unicode data for Nuitka builds, inserts/adjusts CI steps, and updates many asciicast transcripts and feature test expectations to reference 0.12.1.

Changes

Cohort / File(s) Summary
Version & Changelog
CHANGELOG.rst, dfetch/__init__.py
Added Release 0.12.1 entry and bumped __version__ 0.12.0 → 0.12.1.
Packaging (Nuitka)
pyproject.toml
Added include-package="rich._unicode_data" under [tool.nuitka].
CI workflows
.github/workflows/build.yml, .github/workflows/run.yml
Inserted new CI steps and a shell block that perform local git commits and run dfetch update-patch / dfetch format-patch in test jobs.
Asciicast transcripts & docs
doc/asciicasts/*, doc/*.rst
Regenerated transcript files and docs metadata; updated timestamps/version strings to 0.12.1 (content/metadata-only).
Feature tests
features/*.feature
Updated expected output strings across many feature files to show Dfetch (0.12.1) instead of (0.12.0); no logic changes.
Workflow test setup (repo edits)
.github/workflows/...
Added explicit git repository setup and commits within CI test steps, altering test-job control flow within CI only.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

bug, github_actions, testing

Suggested reviewers

  • ben-edna
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Hotfix: Rich _unicode_data missing' directly addresses the main change in the PR, which adds the missing unicode data package to the Nuitka build configuration (include-package='rich._unicode_data' in pyproject.toml), fixing issue #1014.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch spoorcc/issue1014

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.

@spoorcc spoorcc changed the base branch from main to release/0.12.x February 23, 2026 18:48
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

🧹 Nitpick comments (2)
pyproject.toml (1)

206-206: Core fix looks correct – include-package is the right Nuitka directive here.

rich==14.3.3 exists on PyPI. rich._unicode_data is a Python subpackage whose modules contain Unicode character-width tables as Python code (not raw data files), so include-package is the right choice; include-package-data handles non-Python resource files and would not help here.

If imports are invisible to Nuitka (e.g. dynamically created), --include-module or --include-package should be used — consistent with this fix.

One optional nit: consider adding an inline comment (mirroring the one on line 207) to explain why Nuitka can't auto-discover this subpackage:

💬 Suggested comment
-include-package="rich._unicode_data"
+include-package="rich._unicode_data" # Explicitly add package — Nuitka doesn't auto-discover the dynamic import used for Unicode width data
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pyproject.toml` at line 206, Add an inline comment next to the
include-package="rich._unicode_data" directive explaining that
rich._unicode_data is a Python subpackage generated as code (contains Unicode
width tables) and is not auto-discovered by Nuitka, mirroring the style of the
existing comment on the following line (line 207) so future maintainers know why
--include-package is required instead of include-package-data or relying on
auto-detection.
features/report-sbom.feature (1)

215-217: cyclonedx-python-lib version pinned in test expectation will require a manual update on every library upgrade.

The hardcoded "version": "11.6.0" for cyclonedx-python-lib in the expected SBOM output means the test will silently break whenever the library is bumped. Consider extracting the version from the installed package in a step-definition helper, or at a minimum adding a comment here to flag that this needs updating on each dependency upgrade.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@features/report-sbom.feature` around lines 215 - 217, The test currently
hardcodes "version": "11.6.0" for cyclonedx-python-lib in the expected SBOM
output which will break on upgrades; update the step definition that builds the
expected SBOM to dynamically read the installed cyclonedx-python-lib version
(e.g., via importlib.metadata.version("cyclonedx-python-lib") or
pkg_resources.get_distribution("cyclonedx-python-lib").version) and inject that
value into the expected JSON (replace the literal "11.6.0" in the expectation),
or if you cannot change the step code now, add a clear comment next to the
"cyclonedx-python-lib" entry in report-sbom.feature noting this version must be
updated when the dependency is bumped.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CHANGELOG.rst`:
- Line 1: Update the release date string "Release 0.12.1 (released 2026-02-24)"
in CHANGELOG.rst to match the actual tag/release date on PyPI (or confirm and
keep it if intended); locate that exact line and either change the date to
2026-02-23 if the PR date should be used, or verify the package release tag and
ensure the changelog matches the authoritative release date before merging.

---

Nitpick comments:
In `@features/report-sbom.feature`:
- Around line 215-217: The test currently hardcodes "version": "11.6.0" for
cyclonedx-python-lib in the expected SBOM output which will break on upgrades;
update the step definition that builds the expected SBOM to dynamically read the
installed cyclonedx-python-lib version (e.g., via
importlib.metadata.version("cyclonedx-python-lib") or
pkg_resources.get_distribution("cyclonedx-python-lib").version) and inject that
value into the expected JSON (replace the literal "11.6.0" in the expectation),
or if you cannot change the step code now, add a clear comment next to the
"cyclonedx-python-lib" entry in report-sbom.feature noting this version must be
updated when the dependency is bumped.

In `@pyproject.toml`:
- Line 206: Add an inline comment next to the
include-package="rich._unicode_data" directive explaining that
rich._unicode_data is a Python subpackage generated as code (contains Unicode
width tables) and is not auto-discovered by Nuitka, mirroring the style of the
existing comment on the following line (line 207) so future maintainers know why
--include-package is required instead of include-package-data or relying on
auto-detection.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 57da6d6 and 4fd2485.

📒 Files selected for processing (48)
  • CHANGELOG.rst
  • dfetch/__init__.py
  • doc/asciicasts/basic.cast
  • doc/asciicasts/check-ci.cast
  • doc/asciicasts/check.cast
  • doc/asciicasts/diff.cast
  • doc/asciicasts/environment.cast
  • doc/asciicasts/format-patch.cast
  • doc/asciicasts/freeze.cast
  • doc/asciicasts/import.cast
  • doc/asciicasts/init.cast
  • doc/asciicasts/report.cast
  • doc/asciicasts/sbom.cast
  • doc/asciicasts/update-patch.cast
  • doc/asciicasts/update.cast
  • doc/asciicasts/validate.cast
  • doc/contributing.rst
  • doc/installation.rst
  • features/check-git-repo.feature
  • features/check-specific-projects.feature
  • features/check-svn-repo.feature
  • features/checked-project-has-dependencies.feature
  • features/diff-in-git.feature
  • features/diff-in-svn.feature
  • features/fetch-checks-destination.feature
  • features/fetch-file-pattern-git.feature
  • features/fetch-file-pattern-svn.feature
  • features/fetch-git-repo.feature
  • features/fetch-single-file-git.feature
  • features/fetch-single-file-svn.feature
  • features/fetch-with-ignore-git.feature
  • features/fetch-with-ignore-svn.feature
  • features/guard-against-overwriting-git.feature
  • features/guard-against-overwriting-svn.feature
  • features/handle-invalid-metadata.feature
  • features/journey-basic-patching.feature
  • features/journey-basic-usage.feature
  • features/list-projects.feature
  • features/patch-after-fetch-git.feature
  • features/patch-after-fetch-svn.feature
  • features/patch-fuzzy-matching-git.feature
  • features/report-sbom.feature
  • features/suggest-project-name.feature
  • features/update-patch-in-git.feature
  • features/update-patch-in-svn.feature
  • features/updated-project-has-dependencies.feature
  • features/validate-manifest.feature
  • pyproject.toml

@spoorcc spoorcc changed the base branch from release/0.12.x to main February 23, 2026 19:29
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.

♻️ Duplicate comments (1)
CHANGELOG.rst (1)

1-1: Release date is now accurate.

Today is 2026-02-24, so the date in the header matches. The previously flagged concern is no longer applicable.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.rst` at line 1, Remove the stale duplicate review note by resolving
or deleting the duplicate comment and ensure the CHANGELOG.rst header "Release
0.12.1 (released 2026-02-24)" is the single authoritative release line; update
the review thread/status so it is marked resolved and no duplicate comments
remain referencing the same change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@CHANGELOG.rst`:
- Line 1: Remove the stale duplicate review note by resolving or deleting the
duplicate comment and ensure the CHANGELOG.rst header "Release 0.12.1 (released
2026-02-24)" is the single authoritative release line; update the review
thread/status so it is marked resolved and no duplicate comments remain
referencing the same change.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4fd2485 and 3174ac6.

📒 Files selected for processing (48)
  • CHANGELOG.rst
  • dfetch/__init__.py
  • doc/asciicasts/basic.cast
  • doc/asciicasts/check-ci.cast
  • doc/asciicasts/check.cast
  • doc/asciicasts/diff.cast
  • doc/asciicasts/environment.cast
  • doc/asciicasts/format-patch.cast
  • doc/asciicasts/freeze.cast
  • doc/asciicasts/import.cast
  • doc/asciicasts/init.cast
  • doc/asciicasts/report.cast
  • doc/asciicasts/sbom.cast
  • doc/asciicasts/update-patch.cast
  • doc/asciicasts/update.cast
  • doc/asciicasts/validate.cast
  • doc/contributing.rst
  • doc/installation.rst
  • features/check-git-repo.feature
  • features/check-specific-projects.feature
  • features/check-svn-repo.feature
  • features/checked-project-has-dependencies.feature
  • features/diff-in-git.feature
  • features/diff-in-svn.feature
  • features/fetch-checks-destination.feature
  • features/fetch-file-pattern-git.feature
  • features/fetch-file-pattern-svn.feature
  • features/fetch-git-repo.feature
  • features/fetch-single-file-git.feature
  • features/fetch-single-file-svn.feature
  • features/fetch-with-ignore-git.feature
  • features/fetch-with-ignore-svn.feature
  • features/guard-against-overwriting-git.feature
  • features/guard-against-overwriting-svn.feature
  • features/handle-invalid-metadata.feature
  • features/journey-basic-patching.feature
  • features/journey-basic-usage.feature
  • features/list-projects.feature
  • features/patch-after-fetch-git.feature
  • features/patch-after-fetch-svn.feature
  • features/patch-fuzzy-matching-git.feature
  • features/report-sbom.feature
  • features/suggest-project-name.feature
  • features/update-patch-in-git.feature
  • features/update-patch-in-svn.feature
  • features/updated-project-has-dependencies.feature
  • features/validate-manifest.feature
  • pyproject.toml
✅ Files skipped from review due to trivial changes (1)
  • doc/asciicasts/check-ci.cast
🚧 Files skipped from review as they are similar to previous changes (29)
  • features/check-git-repo.feature
  • features/patch-after-fetch-svn.feature
  • doc/asciicasts/update-patch.cast
  • features/fetch-file-pattern-git.feature
  • features/check-svn-repo.feature
  • features/fetch-with-ignore-svn.feature
  • doc/asciicasts/freeze.cast
  • features/fetch-file-pattern-svn.feature
  • features/updated-project-has-dependencies.feature
  • doc/installation.rst
  • features/guard-against-overwriting-svn.feature
  • features/handle-invalid-metadata.feature
  • features/validate-manifest.feature
  • features/report-sbom.feature
  • doc/asciicasts/init.cast
  • features/suggest-project-name.feature
  • features/list-projects.feature
  • dfetch/init.py
  • doc/asciicasts/check.cast
  • features/journey-basic-patching.feature
  • features/check-specific-projects.feature
  • pyproject.toml
  • features/fetch-single-file-svn.feature
  • doc/asciicasts/validate.cast
  • features/fetch-single-file-git.feature
  • features/update-patch-in-svn.feature
  • features/fetch-checks-destination.feature
  • features/patch-after-fetch-git.feature
  • doc/asciicasts/report.cast

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.

🧹 Nitpick comments (1)
.github/workflows/run.yml (1)

45-46: Consider adding update-patch and format-patch to the run job as well.

The two new steps are added to test-cygwin but the run job (multi-platform × multi-Python matrix, lines 113–118) does not include them. Since the issue being fixed (#1014) is about standalone binary packaging, the Cygwin/binary jobs are the priority — but running these commands against the pip-installed package across all platforms/Python versions would give broader regression coverage.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/run.yml around lines 45 - 46, Add the two dfetch steps to
the multi-platform "run" job so it mirrors test-cygwin: in the GitHub Actions
workflow add "dfetch update-patch" and "dfetch format-patch" as steps in the run
job (the matrix multi-platform × multi-Python job referenced as the run job) so
the pip-installed package on all platforms/Python versions runs the same
patch-update and formatting checks that were added to the test-cygwin job.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/run.yml:
- Around line 45-46: Add the two dfetch steps to the multi-platform "run" job so
it mirrors test-cygwin: in the GitHub Actions workflow add "dfetch update-patch"
and "dfetch format-patch" as steps in the run job (the matrix multi-platform ×
multi-Python job referenced as the run job) so the pip-installed package on all
platforms/Python versions runs the same patch-update and formatting checks that
were added to the test-cygwin job.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3174ac6 and 2745c9d.

📒 Files selected for processing (50)
  • .github/workflows/build.yml
  • .github/workflows/run.yml
  • CHANGELOG.rst
  • dfetch/__init__.py
  • doc/asciicasts/basic.cast
  • doc/asciicasts/check-ci.cast
  • doc/asciicasts/check.cast
  • doc/asciicasts/diff.cast
  • doc/asciicasts/environment.cast
  • doc/asciicasts/format-patch.cast
  • doc/asciicasts/freeze.cast
  • doc/asciicasts/import.cast
  • doc/asciicasts/init.cast
  • doc/asciicasts/report.cast
  • doc/asciicasts/sbom.cast
  • doc/asciicasts/update-patch.cast
  • doc/asciicasts/update.cast
  • doc/asciicasts/validate.cast
  • doc/contributing.rst
  • doc/installation.rst
  • features/check-git-repo.feature
  • features/check-specific-projects.feature
  • features/check-svn-repo.feature
  • features/checked-project-has-dependencies.feature
  • features/diff-in-git.feature
  • features/diff-in-svn.feature
  • features/fetch-checks-destination.feature
  • features/fetch-file-pattern-git.feature
  • features/fetch-file-pattern-svn.feature
  • features/fetch-git-repo.feature
  • features/fetch-single-file-git.feature
  • features/fetch-single-file-svn.feature
  • features/fetch-with-ignore-git.feature
  • features/fetch-with-ignore-svn.feature
  • features/guard-against-overwriting-git.feature
  • features/guard-against-overwriting-svn.feature
  • features/handle-invalid-metadata.feature
  • features/journey-basic-patching.feature
  • features/journey-basic-usage.feature
  • features/list-projects.feature
  • features/patch-after-fetch-git.feature
  • features/patch-after-fetch-svn.feature
  • features/patch-fuzzy-matching-git.feature
  • features/report-sbom.feature
  • features/suggest-project-name.feature
  • features/update-patch-in-git.feature
  • features/update-patch-in-svn.feature
  • features/updated-project-has-dependencies.feature
  • features/validate-manifest.feature
  • pyproject.toml
🚧 Files skipped from review as they are similar to previous changes (37)
  • features/fetch-single-file-git.feature
  • features/journey-basic-usage.feature
  • features/fetch-git-repo.feature
  • features/validate-manifest.feature
  • features/check-svn-repo.feature
  • features/journey-basic-patching.feature
  • features/suggest-project-name.feature
  • features/patch-after-fetch-svn.feature
  • doc/installation.rst
  • dfetch/init.py
  • features/fetch-with-ignore-svn.feature
  • features/update-patch-in-svn.feature
  • features/fetch-file-pattern-git.feature
  • doc/asciicasts/sbom.cast
  • features/patch-fuzzy-matching-git.feature
  • doc/contributing.rst
  • doc/asciicasts/check-ci.cast
  • features/guard-against-overwriting-svn.feature
  • features/fetch-file-pattern-svn.feature
  • features/handle-invalid-metadata.feature
  • doc/asciicasts/init.cast
  • features/check-git-repo.feature
  • features/list-projects.feature
  • features/report-sbom.feature
  • doc/asciicasts/update.cast
  • doc/asciicasts/validate.cast
  • features/patch-after-fetch-git.feature
  • doc/asciicasts/freeze.cast
  • CHANGELOG.rst
  • features/fetch-with-ignore-git.feature
  • features/fetch-single-file-svn.feature
  • features/check-specific-projects.feature
  • doc/asciicasts/basic.cast
  • doc/asciicasts/import.cast
  • features/diff-in-svn.feature
  • doc/asciicasts/diff.cast
  • features/fetch-checks-destination.feature

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.

♻️ Duplicate comments (1)
.github/workflows/run.yml (1)

118-119: Same concern as the test-cygwin job above.

The identical dfetch update-patch + dfetch format-patch sequence is added here without the prerequisite git commit steps that appear in build.yml. The same validation applies.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/run.yml around lines 118 - 119, The workflow runs `dfetch
update-patch` and `dfetch format-patch` without first committing changes, so add
the same pre-commit steps used in the other job: configure git user.name and
user.email, stage changes (e.g., `git add -A`) and create a commit (e.g., `git
commit -m "ci: apply dfetch changes" || true`) before invoking `dfetch
update-patch` and `dfetch format-patch` so the patch commands have a commit to
operate on; mirror the exact commit-step sequence used in the `build` job to
keep behavior consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.github/workflows/run.yml:
- Around line 118-119: The workflow runs `dfetch update-patch` and `dfetch
format-patch` without first committing changes, so add the same pre-commit steps
used in the other job: configure git user.name and user.email, stage changes
(e.g., `git add -A`) and create a commit (e.g., `git commit -m "ci: apply dfetch
changes" || true`) before invoking `dfetch update-patch` and `dfetch
format-patch` so the patch commands have a commit to operate on; mirror the
exact commit-step sequence used in the `build` job to keep behavior consistent.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2745c9d and 9b1c9cf.

📒 Files selected for processing (2)
  • .github/workflows/build.yml
  • .github/workflows/run.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/build.yml

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.

1 participant