Skip to content

fix(packaging): point package readmes inside their project directories - #2088

Merged
slin1237 merged 1 commit into
mainfrom
fix/hatchling-readme-path
Aug 11, 2026
Merged

fix(packaging): point package readmes inside their project directories#2088
slin1237 merged 1 commit into
mainfrom
fix/hatchling-readme-path

Conversation

@slin1237

Copy link
Copy Markdown
Member

Description

Problem

Every e2e job dies in Install wheel and test dependencies since hatchling 1.27.0 released upstream (unpinned in pip's build env):

ValueError: Readme path must be within the project directory: ../../README.md

clients/python (hatchling backend, source-installed by ci_install_e2e_deps.sh in every e2e lane) and bindings/python (maturin, tolerant today but same latent defect) both declared readme = "../../README.md". First hit: #2087's run 31460158272 (20+ jobs down); main's post-#2060 run hits the same wall as its e2e installs proceed. Same failure class as #2086 — unpinned build tooling moved underneath us.

Solution

The metadata was always out-of-spec — a wheel embeds its readme, so a path outside the sdist boundary never round-tripped; older hatchling merely tolerated it. Point both packages at local readmes rather than pinning hatchling back: bindings/python already had a real README its pyproject was pointing past, and smg_client gets a short one describing the package.

Changes

  • clients/python/README.md: new package readme; pyproject.toml points at it.
  • bindings/python/pyproject.toml: point at the existing local README.md.

Test Plan

  • Built the smg_client sdist against hatchling==1.27.0 exactly (the version that broke CI): succeeds; fails identically to CI before the fix.
  • The e2e lanes on this PR exercise the real install path in every job.
Checklist
  • cargo +nightly fmt passes (no Rust changes)
  • cargo clippy --all-targets --all-features -- -D warnings passes (no Rust changes)
  • (Optional) Documentation updated
  • (Optional) Please join us on Slack #sig-smg to discuss, review, and merge PRs

hatchling 1.27.0 (released upstream, installed unpinned in build envs)
rejects readme paths outside the project directory. clients/python and
bindings/python both declared readme = "../../README.md", so every
e2e job now dies in 'Install wheel and test dependencies' when pip
source-installs smg_client:

  ValueError: Readme path must be within the project directory:
  ../../README.md

The metadata was always out-of-spec - a wheel embeds its readme, so
referencing outside the sdist boundary never round-tripped - older
hatchling merely tolerated it. Give smg_client its own README and point
both packages at their local files (bindings/python already had one
that the pyproject was pointing past). Verified by building the
smg_client sdist against hatchling==1.27.0 exactly.

Signed-off-by: Simo Lin <25425177+slin1237@users.noreply.github.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation python-bindings Python bindings changes dependencies Dependency updates labels Aug 11, 2026
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@slin1237, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a569ac96-067a-46f2-a6b5-803b6f675def

📥 Commits

Reviewing files that changed from the base of the PR and between d676365 and b124488.

📒 Files selected for processing (3)
  • bindings/python/pyproject.toml
  • clients/python/README.md
  • clients/python/pyproject.toml

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.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Clean fix. Both pyproject.toml readme paths now correctly reference local files, resolving the hatchling 1.27.0 breakage. The new clients/python/README.md is accurate. No issues found.

@slin1237
slin1237 merged commit ef67ece into main Aug 11, 2026
44 of 45 checks passed
@slin1237
slin1237 deleted the fix/hatchling-readme-path branch August 11, 2026 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates documentation Improvements or additions to documentation python-bindings Python bindings changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant