Skip to content

feat: Support the flag-overrides capability in the contract test service - #368

Merged
kinyoklion merged 2 commits into
dotnet-server-sdk-v9from
rlamb/overrides-dotnet-contract-tests
Oct 29, 2026
Merged

kinyoklion merged 2 commits into
dotnet-server-sdk-v9from
rlamb/overrides-dotnet-contract-tests

Conversation

@kinyoklion

@kinyoklion kinyoklion commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Summary

Adds the flag-overrides capability to the contract test service and the overrides block of the SDK configuration it accepts, as described in the test harness service specification. The block's filePaths, duplicateKeysHandling (fail or ignore), changeDetection (polling or watching), and pollIntervalMs map onto FileOverrides.Source() options, and the source is attached to the FDv2 data system builder that the dataSystem block configures. The test service registers a YamlDotNet parser for the .yaml and .yml extensions so the harness's YAML document test can run.

The test service also takes an optional port as its first command line argument, defaulting to 8000, so that several test services can run on one machine.

It depends on the file-based override source change, #367, which is merged into dotnet-server-sdk-v9.

SDK-3248


Note

Overview
Adds flag-overrides to the contract test service so the harness can exercise file-based flag overrides on the .NET server SDK.

Harness JSON can now include an overrides block (filePaths, duplicateKeysHandling, changeDetection, pollIntervalMs), which is mapped to FileOverrides.Source() and attached to the FDv2 dataSystem builder; overrides without dataSystem fails fast with an ArgumentException. YamlDotNet is added so .yaml/.yml override files parse correctly in conformance tests.

The test service Main also accepts an optional port argument (default 8000) so multiple instances can run on one machine.

Reviewed by Cursor Bugbot for commit 477ea95. Bugbot is set up for automated code reviews on this repo. Configure here.

Opened from termag

@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 4011fef to bf327fc Compare September 28, 2026 20:39
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from a735815 to 108b012 Compare September 28, 2026 20:39
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from bf327fc to e30694a Compare October 1, 2026 23:43
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 108b012 to 38f158a Compare October 1, 2026 23:43
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from e30694a to 4de98c7 Compare October 3, 2026 01:34
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 38f158a to 1335438 Compare October 3, 2026 01:34
@kinyoklion

Copy link
Copy Markdown
Member Author

bugbot review

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

Stale Bugbot comment from a previous run.

@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 4de98c7 to 57ffcf0 Compare October 3, 2026 01:52
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 1335438 to 9923ba9 Compare October 3, 2026 01:52
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 57ffcf0 to c3dbd2d Compare October 5, 2026 21:55
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 9923ba9 to 27bea4c Compare October 5, 2026 21:55
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from c3dbd2d to 6973a4f Compare October 5, 2026 22:12
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 27bea4c to 8c96c87 Compare October 5, 2026 22:12
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 6973a4f to 78d3e87 Compare October 5, 2026 22:28
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 8c96c87 to f6043bf Compare October 5, 2026 22:28
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 78d3e87 to 08c4cf0 Compare October 5, 2026 23:56
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from f6043bf to 076e57b Compare October 5, 2026 23:56
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 08c4cf0 to c9c756b Compare October 13, 2026 21:03
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 076e57b to cf393cf Compare October 13, 2026 21:03
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from c9c756b to e0d0597 Compare October 13, 2026 22:13
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch 2 times, most recently from d1cd013 to 4636439 Compare October 15, 2026 22:24
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 6bdec5e to 40f4cd0 Compare October 16, 2026 21:21
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 4636439 to 4d6985e Compare October 16, 2026 21:21
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 40f4cd0 to adf57b3 Compare October 23, 2026 23:50
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 4d6985e to 75ac59d Compare October 23, 2026 23:50
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from adf57b3 to 6ea364e Compare October 26, 2026 22:46
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 75ac59d to bcd2502 Compare October 26, 2026 22:46
@kinyoklion

Copy link
Copy Markdown
Member Author

bugbot review

@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 38e27a9 to 17b4181 Compare October 28, 2026 21:04
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from efe9c3f to cf58e95 Compare October 28, 2026 21:04
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 17b4181 to 12fe60a Compare October 28, 2026 21:23
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from cf58e95 to 0c739a0 Compare October 28, 2026 21:23
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 12fe60a to d5815a3 Compare October 28, 2026 21:53
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 0c739a0 to a23756d Compare October 28, 2026 21:53
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from d5815a3 to fc4d238 Compare October 28, 2026 22:02
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from a23756d to 5eecdc7 Compare October 28, 2026 22:02
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from fc4d238 to 865e1fe Compare October 28, 2026 22:35
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch 2 times, most recently from 11a595e to eccbb3b Compare October 28, 2026 23:00
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from f18639e to f755f8c Compare October 29, 2026 16:45
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from eccbb3b to dec410a Compare October 29, 2026 16:45
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from f755f8c to cd33ec6 Compare October 29, 2026 20:23
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from dec410a to fda1f9d Compare October 29, 2026 20:23
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from cd33ec6 to 7bad1f8 Compare October 29, 2026 20:39
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from fda1f9d to 807b509 Compare October 29, 2026 20:39
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from 7bad1f8 to a281c34 Compare October 29, 2026 20:53
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 807b509 to 32152a7 Compare October 29, 2026 20:53
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-file-source branch from a281c34 to feaf592 Compare October 29, 2026 21:14
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 32152a7 to 477ea95 Compare October 29, 2026 21:14
Base automatically changed from rlamb/overrides-dotnet-file-source to dotnet-server-sdk-v9 October 29, 2026 21:22
The test service advertises the flag-overrides capability and accepts
the overrides block of the SDK configuration: filePaths,
duplicateKeysHandling, changeDetection, and pollIntervalMs map onto the
FileOverrides.Source() options, and the source is attached to the FDv2
data system builder. The service supplies a YamlDotNet parser so YAML
documents can be tested. An optional first command line argument selects
the port.
@kinyoklion
kinyoklion force-pushed the rlamb/overrides-dotnet-contract-tests branch from 477ea95 to 26453ca Compare October 29, 2026 21:23
@kinyoklion
kinyoklion merged commit b80d6aa into dotnet-server-sdk-v9 Oct 29, 2026
9 checks passed
@kinyoklion
kinyoklion deleted the rlamb/overrides-dotnet-contract-tests branch October 29, 2026 21:37
kinyoklion pushed a commit that referenced this pull request Oct 29, 2026
…ha.1 (#382)

🤖 I have created a release *beep* *boop*
---


##
[9.0.0-alpha.1](LaunchDarkly.ServerSdk-v9.0.0-alpha.0...LaunchDarkly.ServerSdk-v9.0.0-alpha.1)
(2026-10-29)


### Features

* Add a shared file data reloader, poller, and watcher
([#361](#361))
([4eed241](4eed241))
* Add the file-based override source
([#367](#367))
([b834131](b834131))
* Add the override marker to the flag and segment models and mark
evaluations
([#363](#363))
([21f666a](21f666a))
* Add the override store, overlay, source interfaces, and data system
wiring ([#364](#364))
([e1748a1](e1748a1))
* Mark evaluation events as override-affected
([#366](#366))
([7c873a0](7c873a0))
* Split summary counters by overrideAffected and suppress individual
events for marked evaluations
([#365](#365))
([c9b327b](c9b327b))
* Support the flag-overrides capability in the contract test service
([#368](#368))
([b80d6aa](b80d6aa))

---
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**
> This is a **Release Please** cut that publishes
**LaunchDarkly.ServerSdk `9.0.0-alpha.1`**. The diff only updates
release metadata: `.release-please-manifest.json`,
`LaunchDarkly.ServerSdk.csproj` `<Version>`, `PROVENANCE.md`
verification example, and a new **`9.0.0-alpha.1`** section in
`CHANGELOG.md`.
> 
> The changelog entry documents what ships in this alpha (already merged
elsewhere): **local flag overrides** via override store/overlay/source
wiring and a **file-based override source** with shared file
reloader/poller/watcher; **override markers** on flag/segment models and
evaluations; **analytics** changes that mark override-affected
evaluations, split summary counters by `overrideAffected`, and suppress
individual events when appropriate; plus **contract-test** support for
the flag-overrides capability.
> 
> Reviewers can treat this as a **versioning and release-notes sanity
check**—no application logic changes appear in the diff itself.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
81f0588. 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>
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.

2 participants