Skip to content

fix(release): keep sdk core pin in lockstep - #54

Merged
elkaix merged 2 commits into
mainfrom
fix/release-sdk-core-pin
Jun 2, 2026
Merged

fix(release): keep sdk core pin in lockstep#54
elkaix merged 2 commits into
mainfrom
fix/release-sdk-core-pin

Conversation

@elkaix

@elkaix elkaix commented Jun 2, 2026

Copy link
Copy Markdown
Member

Fixes the 0.29.0 release binary build failure.

Root cause: release build uses make prepare-build (uv sync --all-extras --all-packages --no-sources), and sdks/pythinker-sdk still pinned pythinker-core==1.1.1 while root pythinker-code pins pythinker-core[contrib]==1.2.0.

Changes:

  • Update SDK core pin to 1.2.0
  • Teach release.py to update the SDK core pin when bumping core
  • Extend dependency validation and CI/release callsites
  • Add regression tests for SDK/core pin drift

Summary by CodeRabbit

  • Chores

    • SDK dependency pythinker-core bumped 1.1.1 → 1.2.0
    • Release automation now updates SDK dependency pins in lockstep with core
    • CI workflows extended to validate SDK dependency pins match the core version
  • Tests

    • Added tests ensuring SDK/core dependency version consistency
    • Refactored test helpers for dependency/version checks
  • Documentation

    • Release plan and changelog updated to reflect the new validation steps

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d25459c2-c94c-4912-8ab5-da68f9a741f5

📥 Commits

Reviewing files that changed from the base of the PR and between 26cefa5 and a48d617.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • docs/superpowers/plans/2026-05-31-release-orchestration-p1-release-tool.md
  • scripts/check_pythinker_dependency_versions.py

📝 Walkthrough

Walkthrough

This PR extends pythinker's version-lockstep validation to include the SDK package. The dependency checker, release script, and CI workflows are updated to enforce that the SDK's pythinker-core pin matches the workspace core version. The SDK dependency is bumped from 1.1.1 to 1.2.0, and comprehensive test coverage is added.

Changes

SDK Dependency Lockstep Validation

Layer / File(s) Summary
Version checker SDK validation
scripts/check_pythinker_dependency_versions.py
Adds --pythinker-sdk-pyproject CLI argument, collects workspace package versions into a map during initial loads, and validates the SDK's pinned pythinker-core matches the workspace pythinker-core version; reports an error on mismatch.
Release script SDK integration
scripts/release.py
Introduces SDK_PYPROJECT constant, updates rewrite() to bump pythinker-core in the SDK when --bump-core is set, and extends the dependency validation gate to pass the SDK path.
CI workflow updates
.github/workflows/ci-pythinker-cli.yml, .github/workflows/release-pythinker-cli.yml
Both workflows now pass --pythinker-sdk-pyproject sdks/pythinker-sdk/pyproject.toml to the dependency checker invocation.
SDK pythinker-core version bump
sdks/pythinker-sdk/pyproject.toml
Dependency on pythinker-core updated from 1.1.1 to 1.2.0.
Test helper refactoring and lockstep validation
tests/test_version_lockstep.py
New helpers _deps(), _root_deps(), and _pin_in() centralize TOML reading and pin extraction; _pin() now delegates to them. Adds test_sdk_core_pin_matches_core_version.
Release script test coverage for SDK
tests/test_release_py.py
Existing tests updated to create SDK pyproject mocks and pass --pythinker-sdk-pyproject; new test test_dep_check_fails_when_sdk_core_pin_drifts asserts the checker detects SDK core pin mismatches.
Docs and plan updates
CHANGELOG.md, docs/superpowers/plans/...
Changelog and release-orchestration plan updated to document the SDK/core pin lockstep and to show examples/GATES that pass the new CLI args.

🎯 2 (Simple) | ⏱️ ~10 minutes


suggestions: bug, dependencies

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.67% which is insufficient. The required threshold is 70.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title follows conventional commits format with type 'fix', scope 'release', and a clear description of keeping SDK core pin in lockstep, directly matching the PR's main objective.
Description check ✅ Passed The description clearly explains the root cause, lists specific changes made, and indicates tests were added. However, it lacks explicit links to the related issue or confirmation of checklist items.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/release-sdk-core-pin

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/check_pythinker_dependency_versions.py`:
- Around line 104-106: The f-string passed to errors.append(...) exceeds the
100-char limit; refactor the message so no line passes 100 chars by breaking the
long f-string into a shorter variable or using implicit string concatenation
across multiple lines before calling errors.append. Locate the errors.append
call that references args.pythinker_sdk_pyproject and construct the message in a
wrapped form (e.g., msg = f"...{args.pythinker_sdk_pyproject}." split across
lines or concatenated), then call errors.append(msg) to keep each source line
under 100 characters.
- Line 49: The docs examples that invoke the script
check_pythinker_dependency_versions.py must be updated to include the newly
required CLI option --pythinker-sdk-pyproject; find usages of the script in
documentation (e.g., examples that call "python
scripts/check_pythinker_dependency_versions.py" or "uv run python
scripts/check_pythinker_dependency_versions.py") and add the corresponding
--pythinker-sdk-pyproject <path> argument so the
parser.add_argument("--pythinker-sdk-pyproject", type=Path, required=True)
requirement is satisfied when copy-pasted; ensure any example command lines and
README snippets consistently show both --pythinker-review-pyproject and
--pythinker-sdk-pyproject.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9f81352e-caee-4390-bba1-c0a1c0f62203

📥 Commits

Reviewing files that changed from the base of the PR and between 4abac12 and 26cefa5.

📒 Files selected for processing (7)
  • .github/workflows/ci-pythinker-cli.yml
  • .github/workflows/release-pythinker-cli.yml
  • scripts/check_pythinker_dependency_versions.py
  • scripts/release.py
  • sdks/pythinker-sdk/pyproject.toml
  • tests/test_release_py.py
  • tests/test_version_lockstep.py

Comment thread scripts/check_pythinker_dependency_versions.py
Comment thread scripts/check_pythinker_dependency_versions.py
@elkaix
elkaix merged commit 27578a6 into main Jun 2, 2026
37 checks passed
@elkaix
elkaix deleted the fix/release-sdk-core-pin branch July 17, 2026 20:04
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