Skip to content

chore: release main - #166

Merged
jeffdupont merged 1 commit into
mainfrom
release-please--branches--main
Oct 23, 2026
Merged

jeffdupont merged 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

launchdarkly-ai-server: 0.4.0

0.4.0 (2026-10-23)

⚠ BREAKING CHANGES

  • evaluations: keep the management API client internal (#202)
  • evaluations: rename base uri to match spec (#199)
  • evaluations: add test proving harness edge case matches spec (#200)
  • evaluations: route handlers by provider and mode
  • evaluations: mark evaluations from code as experimental (#157)

Experimental

  • evaluations: add test proving harness edge case matches spec (#200) (fa7162e)
  • evaluations: keep the management API client internal (#202) (17270ed)
  • evaluations: mark evaluations from code as experimental (#157) (1389765)
  • evaluations: rename base uri to match spec (#199) (7d93f9c)
  • evaluations: route handlers by provider and mode (f62591f)
  • evaluations: Set JSON as standard for output to pass to judge (#203) (ffc728b)
  • skills: Correct the HTTP 403 advice now that server-side FDv2 is available to every account (#178) (b17e322)

Features

  • agui: add a shared reader for handler streams (#164) (fc08dd5)
  • AIC-3534: add a TypeSafe Jev judge handler (#149) (1b41ea4)
  • client: add configure for SDK defaults (#158) (3736767)
  • langchain: emit AG-UI text and tool events (#163) (ab5e9e1)
  • openai: emit AG-UI text and tool events (#161) (2b1b2d4)

Bug Fixes

  • AIC-3570: re-resolve graph flags on every invoke and stream (#187) (8fdc4d4)
  • AIC-3571: visit every child before its parent in reverse_traverse (#189) (87c73d9)
  • AIC-3572: treat a variation without _ldMeta.enabled as disabled (#184) (7a0d260)
  • AIC-3574: build the LaunchDarkly client off the event loop (#185) (bf03b6c)
  • AIC-3576: record deferred judge scores under the evaluated config (#190) (354d3f1)
  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
  • AIC-3596: name the [otel] extra in the missing-OTel warning (#186) (90ce7bf)
  • client: match a handler's provides_for after normalizing its mode (f62591f)
  • give native graph spans their LaunchDarkly identity (#121) (e863b6d)
launchdarkly-ai-python: 0.3.0

0.3.0 (2026-10-23)

⚠ BREAKING CHANGES

  • evaluations: mark evaluations from code as experimental (#157)

Experimental

  • evaluations: mark evaluations from code as experimental (#157) (1389765)
launchdarkly-ai-claude-agents: 0.2.6

0.2.6 (2026-10-23)

Features

  • claude: emit AG-UI text and tool events (#165) (3f3a0ce)
  • client: add configure for SDK defaults (#158) (3736767)

Bug Fixes

  • AIC-3571: visit every child before its parent in reverse_traverse (#189) (87c73d9)
  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
  • claude-agents: fail the run when the CLI reports an API error as success (#174) (3d1a768)
  • give native graph spans their LaunchDarkly identity (#121) (e863b6d)
launchdarkly-ai-claude-messages: 0.2.5

0.2.5 (2026-10-23)

Features

  • claude: emit AG-UI text and tool events (#165) (3f3a0ce)
  • client: add configure for SDK defaults (#158) (3736767)

Bug Fixes

  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
launchdarkly-ai-openai-agents: 0.2.6

0.2.6 (2026-10-23)

Features

  • client: add configure for SDK defaults (#158) (3736767)
  • openai: emit AG-UI text and tool events (#161) (2b1b2d4)

Bug Fixes

  • AIC-3571: visit every child before its parent in reverse_traverse (#189) (87c73d9)
  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
  • give native graph spans their LaunchDarkly identity (#121) (e863b6d)
launchdarkly-ai-vercel-agents: 0.1.1

0.1.1 (2026-10-23)

Features

  • AIC-3408: add Vercel AI SDK messages and agents adapters (#103) (64d679e)
launchdarkly-ai-litellm-agents: 0.1.1

0.1.1 (2026-10-23)

Features

  • add LiteLLM messages and agents integrations (#102) (f2e9886)
launchdarkly-ai-openai-messages: 0.2.5

0.2.5 (2026-10-23)

Features

  • client: add configure for SDK defaults (#158) (3736767)
  • openai: emit AG-UI text and tool events (#161) (2b1b2d4)

Bug Fixes

  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
launchdarkly-ai-vercel-messages: 0.1.1

0.1.1 (2026-10-23)

Features

  • AIC-3408: add Vercel AI SDK messages and agents adapters (#103) (64d679e)
launchdarkly-ai-litellm-messages: 0.1.1

0.1.1 (2026-10-23)

Features

  • add LiteLLM messages and agents integrations (#102) (f2e9886)
launchdarkly-ai-langchain-agents: 0.2.6

0.2.6 (2026-10-23)

Features

  • client: add configure for SDK defaults (#158) (3736767)
  • langchain: emit AG-UI text and tool events (#163) (ab5e9e1)

Bug Fixes

  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
  • give native graph spans their LaunchDarkly identity (#121) (e863b6d)
launchdarkly-ai-langchain-messages: 0.2.5

0.2.5 (2026-10-23)

Features

  • client: add configure for SDK defaults (#158) (3736767)
  • langchain: emit AG-UI text and tool events (#163) (ab5e9e1)

Bug Fixes

  • AIC-3577: send object tool results to the model as JSON (#188) (dead4bd)
launchdarkly-ai-opencode-agents: 0.2.0

0.2.0 (2026-10-23)

⚠ BREAKING CHANGES

  • opencode: start and stop opencode serve in the handler (#198)

Features

  • opencode-agents: add an OpenCode handler (#159) (fc08e8c)
  • opencode-agents: emit the AG-UI text and tool subset (#162) (7677621)
  • opencode-agents: open one OpenCode session per call (#179) (b225113)
  • opencode-agents: render agent instruction templates (#182) (83175aa)
  • opencode: start and stop opencode serve in the handler (#198) (0748dcf)

Bug Fixes

  • opencode-agents: own the HTTP client (#194) (ed2d419)
  • opencode-agents: skip judges and record structured history (#177) (6fadf1d)
launchdarkly-ai-typesafe: 0.1.1

0.1.1 (2026-10-23)

Features

  • AIC-3534: add a TypeSafe Jev judge handler (#149) (1b41ea4)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 7 times, most recently from 13b2f23 to 36edf8b Compare October 15, 2026 00:28

@jeffdupont jeffdupont 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.

Holding this release:

  1. PR is stale. The last release-please run (38775143699 on 7677621a) failed with a GitHub API timeout, so this branch is still based on fc08e8c3 and 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.
  2. launchdarkly-ai-opencode-agents has 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.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from 012bf9e to f18b2b1 Compare October 15, 2026 18:16

@jeffdupont jeffdupont 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.

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.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 6 times, most recently from 2779b41 to a3dbf03 Compare October 20, 2026 22:03
jeffdupont pushed a commit that referenced this pull request Oct 20, 2026
… 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>
jeffdupont added a commit that referenced this pull request Oct 20, 2026
… 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>
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 8 times, most recently from 62a6b64 to 74a8489 Compare October 21, 2026 21:29
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 6 times, most recently from 59b925d to ad661f6 Compare October 22, 2026 22:59
jeffdupont added a commit that referenced this pull request Oct 22, 2026
…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>
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from 8b80123 to 4afff05 Compare October 23, 2026 13:13
@jeffdupont jeffdupont added the api-compatible An owner judged a flagged public API change compatible; passes the API compatibility check label Oct 23, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 4afff05 to 9d11b7f Compare October 23, 2026 14:47
@jeffdupont
jeffdupont merged commit 662d3f2 into main Oct 23, 2026
8 checks passed
@jeffdupont
jeffdupont deleted the release-please--branches--main branch October 23, 2026 14:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api-compatible An owner judged a flagged public API change compatible; passes the API compatibility check autorelease: tagged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant