Repository navigation
chore: release main - #166
Conversation
13b2f23 to
36edf8b
Compare
jeffdupont
left a comment
There was a problem hiding this comment.
Holding this release:
- PR is stale. The last release-please run (38775143699 on
7677621a) failed with a GitHub API timeout, so this branch is still based onfc08e8c3and is missing #162 (opencode-agents AG-UI subset). Merged now, #162 would ship in opencode-agents 0.1.1 with no changelog entry. Re-run the workflow and confirm #162 shows up. launchdarkly-ai-opencode-agentshas never been published. PyPI returns 404 and there's no tag, so 0.1.1 is its first upload. Please confirm a PyPI pending trusted publisher exists for it before merging. JS Vercel failed the same way on npm.
The bumps look right: ai-server 0.3.0 -> 0.4.0 and ai-python 0.2.0 -> 0.3.0 for the #157 breaking change (minor because pre-1.0), and patches elsewhere.
012bf9e to
f18b2b1
Compare
jeffdupont
left a comment
There was a problem hiding this comment.
Re-checked at the regenerated head. One blocker cleared, one left.
Cleared: the release-please refresh succeeded. opencode-agents 0.1.1 now lists #162 alongside #159, and #121 appears under Bug Fixes. The bumps are still right: ai-server 0.4.0 and ai-python 0.3.0 for #157 (minor, since pre-1.0), patches elsewhere.
Still blocking: launchdarkly-ai-opencode-agents has never been published. PyPI returns 404 and there is no git tag for it, so 0.1.1 would be its first upload. Please confirm a PyPI pending trusted publisher exists for it before merging. Without one the publish job fails, the same way the JS Vercel packages hit an npm OIDC 403. Minor: the changelog compare link points at a launchdarkly-ai-opencode-agents-0.1.0 tag that does not exist.
2779b41 to
a3dbf03
Compare
… too An owner can now judge a flagged change compatible on the release PR, as on any other PR. Without it, a compatible change flagged on the release PR (the capture_content default on #166) could only pass by bumping the version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… too An owner can now judge a flagged change compatible on the release PR, as on any other PR. Without it, a compatible change flagged on the release PR (the capture_content default on #166) could only pass by bumping the version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
62a6b64 to
74a8489
Compare
59b925d to
ad661f6
Compare
…ic API (#196) **Stacked on #195** (the API reports). ## Why The API reports make every public change visible, but they don't stop a breaking change from shipping in a minor or patch release. After 1.0 a breaking change has to be deliberate: declared, and released as a major version. ## What `scripts/api_breaking.py` uses griffe to compare the names in each public module's `__all__` with another git ref. The new **API compatibility** workflow runs it on every PR, and re-runs it when the title or labels change. - **On a PR (`pr`):** compares with the PR's base. A breaking change fails unless one of these is true: - the PR title declares it with `!` (`feat!: ...`, `fix(client)!: ...`), which makes release-please cut a major version (a minor one before 1.0.0); - an owner applied the **`api-compatible`** label because they judge the flagged change compatible. - **On the release PR (`release`):** for each package whose version changes in `.release-please-manifest.json`, compares the code with that package's last release tag (`<component>-<version>`). It fails on a breaking change unless the new version is a major one (a minor one before 1.0.0), or an owner applied `api-compatible` to the release PR. A package with no release tag yet is reported and skipped. - **What counts as breaking:** - from griffe: removed names, removed or moved parameters, new required parameters, changed defaults, changed attribute values; - added by the script: names dropped from `__all__`, and changed return types, which griffe doesn't flag. - **Experimental modules are skipped,** because an experimental feature may change in a minor release. ## Tested - **`tests/test_api_breaking.py` (23 tests)** uses a throwaway git repo with a tagged release. It covers: - each breaking kind, and additive changes that pass; - experimental modules being skipped; - the title and label rules; - release versions before and after 1.0, including 0.9.0 → 1.0.0; - a package with no release tag; - `api-compatible` passing an undeclared breaking release, and another label not passing it. The fixture isolates git from the developer's global config. - **Full suite:** `uv run pytest` gives 2579 passed, 14 skipped. `ruff check` and `ruff format --check` are clean, and `actionlint` passes on the workflow. - **Against real history:** - `pr` against `main`: no breaking changes, so it passes. - `pr` against `launchdarkly-ai-server-0.3.0`: 23 breaking changes. That's 14 names that moved to `experimental`, plus `capture_content`'s default changing from `False` to `None` in every provider factory, `create_handler` and `ProviderHandler`. It exits 1 with a plain title, and 0 with `!` or the label. ## The open release PR #166 Running `release` against #166 flags **6 provider packages**: - claude-agents, langchain-agents, openai-agents: 0.2.5 → 0.2.6 - claude-messages, langchain-messages, openai-messages: 0.2.4 → 0.2.5 Each changed `capture_content`'s default from `False` to `None` (#158) since its last release, but is getting only a patch bump. `client` (0.3.0 → 0.4.0) passes. If `None` means "use the default from `configure()`", callers see no difference. So the **`api-compatible` label now also passes the release check** (06050f1): an owner can judge a release PR compatible, the same way as any other PR. Verified on #166: it exits 1 without the label and 0 with it. The label now exists in this repo. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Overview** > Adds **CI enforcement** so undeclared public API breaks cannot ship in patch/minor releases. > > A new **API compatibility** GitHub Actions workflow runs on every PR (including title/label edits). For normal PRs it runs `scripts.api_breaking pr`, comparing stable `__all__` exports against the merge base via griffe (plus extra checks for `__all__` drops and return-type changes). CI fails unless the title uses conventional-commit `!` or an owner applies **`api-compatible`**. On **release-please** branches it runs `release`, comparing each bumped package to its last release tag and requiring a major (or pre-1.0 minor) bump when breaking changes slipped through. > > `api_report.resolve` is refactored to take a `ModulesCollection` so the breaking checker can reuse the same resolution logic. **`tests/test_api_breaking.py`** covers detection rules, title/label gates, semver alignment, experimental skips, and removed packages. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit a61cf9e. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
8b80123 to
4afff05
Compare
4afff05 to
9d11b7f
Compare
🤖 I have created a release beep boop
launchdarkly-ai-server: 0.4.0
0.4.0 (2026-10-23)
⚠ BREAKING CHANGES
Experimental
Features
Bug Fixes
launchdarkly-ai-python: 0.3.0
0.3.0 (2026-10-23)
⚠ BREAKING CHANGES
Experimental
launchdarkly-ai-claude-agents: 0.2.6
0.2.6 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-claude-messages: 0.2.5
0.2.5 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-openai-agents: 0.2.6
0.2.6 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-vercel-agents: 0.1.1
0.1.1 (2026-10-23)
Features
launchdarkly-ai-litellm-agents: 0.1.1
0.1.1 (2026-10-23)
Features
launchdarkly-ai-openai-messages: 0.2.5
0.2.5 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-vercel-messages: 0.1.1
0.1.1 (2026-10-23)
Features
launchdarkly-ai-litellm-messages: 0.1.1
0.1.1 (2026-10-23)
Features
launchdarkly-ai-langchain-agents: 0.2.6
0.2.6 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-langchain-messages: 0.2.5
0.2.5 (2026-10-23)
Features
Bug Fixes
launchdarkly-ai-opencode-agents: 0.2.0
0.2.0 (2026-10-23)
⚠ BREAKING CHANGES
Features
Bug Fixes
launchdarkly-ai-typesafe: 0.1.1
0.1.1 (2026-10-23)
Features
This PR was generated with Release Please. See documentation.