Skip to content

fix: Allow openfeature-sdk 0.7 and 0.8 - #38

Merged
keelerm84 merged 1 commit into
mainfrom
devin/1793005643-support-openfeature-sdk-0.8
Oct 28, 2026
Merged

keelerm84 merged 1 commit into
mainfrom
devin/1793005643-support-openfeature-sdk-0.8

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Widen the openfeature-sdk requirement so the provider can be installed alongside the latest OpenFeature Ruby SDK (0.7.x / 0.8.x).

  • ~> 0.6.1 → >= 0.6.1, < 0.9. The floor is unchanged. The cap stays below the next 0.x minor because 0.x minors may break.
  • No code changes. The 0.7/0.8 breaking changes (domain-resolved clients, immutable hook inputs, unmutated ResolutionDetails) don't touch APIs the provider uses.
  • Verified locally: the spec suite and RuboCop pass with openfeature-sdk 0.8.1 and launchdarkly-server-sdk 8.19.1. The hello app also evaluates a real flag correctly with 0.8.1.
Implementation details

Requirements

  • I have added test coverage for new or changed functionality (no new functionality; the existing suite was run against the newly allowed versions)
  • I have followed the repository's pull request submission guidelines
  • I have validated my changes against all supported platform versions (verified on MRI Ruby 3.4 locally; JRuby/Windows via CI)

How to test

  • Bypass the Gemfile cooldown locally (openfeature-sdk 0.7+ is less than 7 days old). Then run bundle exec rspec spec and bundle exec rubocop with openfeature-sdk 0.8.1.
  • Run hello-openfeature-ruby-server against this branch with openfeature-sdk 0.8.1 and an SDK key.

Notes / risks

  • Because of the cooldown: 7 in Gemfile, CI resolves openfeature-sdk 0.6.5 for about another week. CI therefore covers the floor, and the local run covers 0.8.1.
  • Alternative considered: require ~> 0.8. This would force every consumer to upgrade, and CI would fail until the cooldown passes.
  • Possible follow-up: since 0.7.0, the SDK logs a deprecation warning for providers that rely on SDK-emitted lifecycle events. To silence it, the provider would emit PROVIDER_READY/PROVIDER_ERROR from init and define emits_lifecycle_events? returning true (spec Appendix E). Evaluation behavior is unaffected.

Link to Devin session: https://app.devin.ai/sessions/4d2f01f383664110b813267040a6403a
Open in Devin Desktop: https://app.devin.ai/desktop/session/4d2f01f383664110b813267040a6403a?variant=devin


Note

Cursor Bugbot is generating a summary for commit 693e036. Configure here.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration
devin-ai-integration Bot requested a review from a team as a code owner October 26, 2026 09:07
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration devin-ai-integration Bot added the devin-pr PRs created by Devin label Oct 26, 2026
@keelerm84
keelerm84 merged commit 4040bce into main Oct 28, 2026
11 checks passed
@keelerm84
keelerm84 deleted the devin/1793005643-support-openfeature-sdk-0.8 branch October 28, 2026 19:52
tanderson-ld pushed a commit that referenced this pull request Oct 29, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.3.1](0.3.0...0.3.1)
(2026-10-29)


### Bug Fixes

* Allow openfeature-sdk 0.7 and 0.8
([#38](#38))
([4040bce](4040bce))
* Require launchdarkly-server-sdk 8.19 so data source failures stay
recoverable
([#42](#42))
([53f8e8b](53f8e8b))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Overview**
> **Release Please** PR that publishes **0.3.1** by bumping the version
from **0.3.0** in `.release-please-manifest.json`,
`lib/ldclient-openfeature/version.rb`, and the `SDK_VERSION` example in
`PROVENANCE.md`.
> 
> `CHANGELOG.md` gains a **0.3.1** section (2026-10-29) under **Bug
Fixes**, documenting what ships in this release: wider compatibility
with **openfeature-sdk** **0.7** and **0.8**, and a minimum
**launchdarkly-server-sdk** **8.19** so data source failures remain
recoverable.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
21bdcfc. 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: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
kinyoklion added a commit that referenced this pull request Nov 6, 2026
…chDarkly Ruby SDK 8.19 (#40)

Updates the README feature matrix after the OpenFeature Ruby SDK
0.6.6–0.8.1 releases (2026-10-22/23) and LaunchDarkly Ruby SDK 8.19.0.

- **Eventing** goes from ✅ to ⚠️, listing two provider gaps:
- A data source update that leaves the provider status unchanged is
emitted again (fix in #36).
- The provider relies on SDK-emitted `PROVIDER_READY`/`PROVIDER_ERROR`,
which OpenFeature Ruby SDK 0.7.0 deprecates (tracked in #39).
- **Initialization** notes that since LaunchDarkly Ruby SDK 8.19.0 a
rejected SDK key is retried, so the constructor waits the full wait time
before initialization fails.
- **Domains** notes that the provider is not domain-scoped
(`domain_scoped?`, OpenFeature Ruby SDK 0.6.7).

<details>
<summary>Details</summary>

- Duplicate events: LaunchDarkly Ruby SDK's
`DataSourceUpdateSinkImpl#update_status` broadcasts again when the state
is unchanged but there is a new error. `DataSourceStatusListener` emits
every broadcast, so one `INTERRUPTED` period can produce several
`PROVIDER_STALE` events (OFP 4.2.2). #36 already adds the status
de-duplication.
- Deprecation: in OpenFeature Ruby SDK 0.7.0
(open-feature/ruby-sdk#353), a provider with `init` but without
`emits_lifecycle_events?` takes the legacy path, and the SDK logs a
deprecation warning once per provider class. The gemspec's `~> 0.6.1`
keeps 0.7 out of range today, and #38 widens it. #39 describes the
follow-up and what blocks it: #38, #36, the Bundler cooldown, and a
needed OFP 4.2.5 update.
- Rejected key: in 8.19.0 the stream and polling data sources report
`INTERRUPTED` and retry after any failure, and they go to `OFF` only
from `stop`. `@ready` is set only on success, so a rejected key keeps
the constructor waiting for the full `wait_for_seconds`.
- Other changes in 0.6.6–0.8.1 need no provider change:
- Hook inputs are immutable and flag metadata is frozen. The provider
builds a new metadata hash on each evaluation.
  - Clients resolve their domain's provider on every call.
- Isolated API instances are supported. The provider includes
`EventEmitter`, so the SDK rejects registering one instance with two
APIs.
- `PROVIDER_RECONCILING`/`PROVIDER_CONTEXT_CHANGED` are static-context
events and don't apply to a server provider.
- Docs only, so no changelog entry or release.

</details>

Link to Devin session:
https://app.devin.ai/sessions/b215bd8a675f4cc39541f1741d4013b7
Open in Devin Desktop:
https://app.devin.ai/desktop/session/b215bd8a675f4cc39541f1741d4013b7?variant=devin
Requested by: @kinyoklion

[SDK-3423](https://launchdarkly.atlassian.net/browse/SDK-3423)


[SDK-3423]:
https://launchdarkly.atlassian.net/browse/SDK-3423?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Overview**
> Updates the README **feature matrix** to reflect OpenFeature Ruby SDK
0.7.x and LaunchDarkly Ruby SDK **8.19.0** behavior—documentation only,
no code changes.
> 
> **Eventing** is downgraded from fully supported to **partially
supported (⚠️)** with notes on two known gaps: duplicate provider events
when the data source status stays the same but errors update
([#36](#36)),
and reliance on SDK-emitted init lifecycle events that 0.7.0 deprecates
([#39](#39)).
> 
> **Initialization** now explains that rejected SDK keys are retried in
8.19.0, so `init` may block for the full configured wait before
reporting failure. **Domains** clarifies the provider is not
domain-scoped, so one provider instance can back multiple OpenFeature
domains with a shared LaunchDarkly client.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
7cac07d. 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: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

devin-pr PRs created by Devin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants