Skip to content

sdk-sync: API 2.0.0+ffb34b7 → sdk-java (minor) - #97

Closed
marketdata-sdk-sync[bot] wants to merge 2 commits into
mainfrom
sdk-sync/2.0.0-ffb34b7
Closed

marketdata-sdk-sync[bot] wants to merge 2 commits into
mainfrom
sdk-sync/2.0.0-ffb34b7

Conversation

@marketdata-sdk-sync

@marketdata-sdk-sync marketdata-sdk-sync Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Generated by sdk-auto-sync for API release 2.0.0 (commit ffb34b7).

Changes in the API surface

Snapshots ae2b047c8f6f → c2a31e277345:

~ GET /v1/options/chain/{underlying}/ ?dte: string  (was integer)

What the agent did

tests: Added tests for the dte query-parameter type change (integer → string) on GET /v1/options/chain/{underlying}/. OptionsResourceTest.java gets wire tests for a new DteFilter sealed type's three new forms (comma list, closed range, and all four comparison operators), plus validation tests (non-negative, max 36500, min<=max) on the new factory methods only — the existing dte(int) single-value overload and its "non-negative" check are left untouched per no-change-to-existing-error-types. OptionsIntegrationTest.java gets 4 live tests, one per form (single value, list, range, comparison), each asserting response-derived bounds/distinctness that would fail if the server ignored the filter. Left the existing dte(-1) regression test as-is to cover backward compatibility.

implement: Added DteFilter (sealed: ValueList/Range/Comparison, each validating 0-36500 inclusive in its own canonical constructor) and a new ExpirationFilter.dte(DteFilter) overload/DteValues variant, covering the API's dte type change (integer -> string) without touching the existing dte(int) single-value overload or its error type. OptionsResource now renders the three new wire forms (comma list, dashed range, operator-prefixed comparison).

  • Resource page/method doc: docs/options/chain.md documents DteFilter and all three forms with a Java example; every new public member has a Javadoc.
  • Every enumerated form has its own wire test (list, range, and all 4 Operator values individually since Operator is a new enum); none beyond what the API describes.
  • Validation holds on every public construction path: factories and direct new DteFilter.ValueList/Range/Comparison(...) all validate (added direct-construction tests for empty list, null element, null operator) — existing dte(int)'s error type is untouched.
  • No coverage exclusions added; JaCoCo HTML report shows full coverage on DteFilter.java, ExpirationFilter.java and OptionsResource.java.
  • Examples (README/client.md/other options docs) show only generic chain usage and weren't claiming filter completeness, so left unchanged; OptionsAdvancedExample.java (not built here) got a DteFilter.range demo added.
  • ADR-008 left unchanged: its sealed-type list is a historical record of the convention at acceptance time, not a living spec, so a later variant doesn't make it wrong.
  • Fixed one test I wrote in phase 1: the comma-list wire assertion compared against the raw (URL-encoded) URI; updated it to decode first, matching the existing ?columns= test convention in this file.
    Outside my limits, nothing else named in the search results referenced dte/chain specifics needing an update (bug.yml, build.gradle.kts, BUG_FINDING.md, and the other unlisted files only matched generically on "options").

changelog: Added changelog entry for DteFilter sealed type supporting multi-value dte filtering on chain endpoint (API 2.0.0): lists three record variants (ValueList, Range, Comparison) with factories, Operator enum (GT/GTE/LT/LTE), new ExpirationFilter.dte(DteFilter) overload, existing dte(int) unchanged, MAX_DAYS constant, validation to [0, 36500].

Files

  • CHANGELOG.md
  • docs/options/chain.md
  • examples/consumer-test/src/main/java/com/marketdata/examples/resources/OptionsAdvancedExample.java
  • src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java
  • src/main/java/com/marketdata/sdk/OptionsResource.java
  • src/main/java/com/marketdata/sdk/options/DteFilter.java
  • src/main/java/com/marketdata/sdk/options/ExpirationFilter.java
  • src/test/java/com/marketdata/sdk/OptionsResourceTest.java

Version

Public-surface change computed by the pipeline: minor

  • added: DteFilter
  • added: DteFilter.list(int, int...)
  • added: DteFilter.range(int, int)
  • added: DteFilter.comparison(DteFilter.Operator, int)
  • added: DteFilter.MAX_DAYS
  • added: DteFilter.Operator
  • added: DteFilter.Operator.GT
  • added: DteFilter.Operator.GTE
  • added: DteFilter.Operator.LT
  • added: DteFilter.Operator.LTE
  • added: DteFilter.Operator.wireValue()
  • added: DteFilter.ValueList
  • added: DteFilter.Range
  • added: DteFilter.Comparison
  • added: ExpirationFilter.dte(DteFilter)
  • added: ExpirationFilter.DteValues

Live-API suite

  • src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java

Files of this suite changed by this pull request. The pipeline did not run the suite (it has no API token); this pull request's CI does.

Job log

The full record of this job — every phase, test and build result, review findings and how they were resolved, and each fix round after the PR was opened — is in the job log comment.


3 coder run(s) · 2 review(s) · 144 turns · 12,676,754 tokens · US$ 6.76 · item 5c097984-5f7b-401b-abba-235a3f417767

Agent runs
  • coder · claude-haiku-4-5-20251001, claude-sonnet-5 · 2,291,666 tokens (117,719 in, 2,136,115 cached, 37,832 out) · 32 turns · US$ 1.28 · 6 min 59 s
  • coder · claude-sonnet-5 · 8,448,249 tokens (73,493 in, 8,337,676 cached, 37,080 out) · 75 turns · US$ 2.33 · 8 min 33 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 1,348,806 tokens (121,879 in, 1,203,597 cached, 23,330 out) · 18 turns · US$ 2.45 · 5 min 24 s
  • security · claude-haiku-4-5-20251001, claude-sonnet-5 · 260,809 tokens (87,457 in, 171,469 cached, 1,883 out) · 4 turns · US$ 0.45 · 26 s
  • analyst · claude-haiku-4-5-20251001 · 188,585 tokens (38,229 in, 143,233 cached, 7,123 out) · 7 turns · US$ 0.14 · 56 s
  • changelog · claude-haiku-4-5-20251001 · 138,639 tokens (29,816 in, 103,781 cached, 5,042 out) · 8 turns · US$ 0.10 · 47 s

tests: Added tests for the dte query-parameter type change (integer → string) on GET /v1/options/chain/{underlying}/. OptionsResourceTest.java gets wire tests for a new DteFilter sealed type's three new forms (comma list, closed range, and all four comparison operators), plus validation tests (non-negative, max 36500, min<=max) on the new factory methods only — the existing dte(int) single-value overload and its "non-negative" check are left untouched per no-change-to-existing-error-types. OptionsIntegrationTest.java gets 4 live tests, one per form (single value, list, range, comparison), each asserting response-derived bounds/distinctness that would fail if the server ignored the filter. Left the existing dte(-1) regression test as-is to cover backward compatibility.

implement: Added `DteFilter` (sealed: ValueList/Range/Comparison, each validating 0-36500 inclusive in its own canonical constructor) and a new `ExpirationFilter.dte(DteFilter)` overload/`DteValues` variant, covering the API's dte type change (integer -> string) without touching the existing `dte(int)` single-value overload or its error type. OptionsResource now renders the three new wire forms (comma list, dashed range, operator-prefixed comparison).
- Resource page/method doc: docs/options/chain.md documents DteFilter and all three forms with a Java example; every new public member has a Javadoc.
- Every enumerated form has its own wire test (list, range, and all 4 Operator values individually since Operator is a new enum); none beyond what the API describes.
- Validation holds on every public construction path: factories and direct `new DteFilter.ValueList/Range/Comparison(...)` all validate (added direct-construction tests for empty list, null element, null operator) — existing `dte(int)`'s error type is untouched.
- No coverage exclusions added; JaCoCo HTML report shows full coverage on DteFilter.java, ExpirationFilter.java and OptionsResource.java.
- Examples (README/client.md/other options docs) show only generic chain usage and weren't claiming filter completeness, so left unchanged; OptionsAdvancedExample.java (not built here) got a DteFilter.range demo added.
- ADR-008 left unchanged: its sealed-type list is a historical record of the convention at acceptance time, not a living spec, so a later variant doesn't make it wrong.
- Fixed one test I wrote in phase 1: the comma-list wire assertion compared against the raw (URL-encoded) URI; updated it to decode first, matching the existing `?columns=` test convention in this file.
Outside my limits, nothing else named in the search results referenced dte/chain specifics needing an update (bug.yml, build.gradle.kts, BUG_FINDING.md, and the other unlisted files only matched generically on "options").

changelog: Added changelog entry for DteFilter sealed type supporting multi-value dte filtering on chain endpoint (API 2.0.0): lists three record variants (ValueList, Range, Comparison) with factories, Operator enum (GT/GTE/LT/LTE), new ExpirationFilter.dte(DteFilter) overload, existing dte(int) unchanged, MAX_DAYS constant, validation to [0, 36500].
@marketdata-sdk-sync marketdata-sdk-sync Bot added minor adds to the SDK's public surface and breaks nothing sdk-sync: in progress sdk-sync is still working on this PR: CI, code review, fixes labels Oct 15, 2026
@marketdata-sdk-sync

marketdata-sdk-sync Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Author

🧾 Job log — sdk-sync

sdk-auto-sync job log

API release 2.0.0 (commit ffb34b7)
SDK sdk-java
Branch sdk-sync/2.0.0-ffb34b7
API surface ae2b047c8f6f → c2a31e277345
Date 2026-10-15 13:49:56Z
Outcome done

Changes in the API surface

~ GET /v1/options/chain/{underlying}/ ?dte: string  (was integer)

1. tests

Coder (32 turns, US$ 1.28, 6 min 59 s):

gradle test --no-daemon --console=plain run once: compileTestJava failed with 20 "cannot find symbol: DteFilter" errors, as expected since phase 2 hasn't added the DteFilter type or the ExpirationFilter.dte(DteFilter) overload yet. git status shows only the two test files modified.

Added tests for the dte query-parameter type change (integer → string) on GET /v1/options/chain/{underlying}/. OptionsResourceTest.java gets wire tests for a new DteFilter sealed type's three new forms (comma list, closed range, and all four comparison operators), plus validation tests (non-negative, max 36500, min<=max) on the new factory methods only — the existing dte(int) single-value overload and its "non-negative" check are left untouched per no-change-to-existing-error-types. OptionsIntegrationTest.java gets 4 live tests, one per form (single value, list, range, comparison), each asserting response-derived bounds/distinctness that would fail if the server ignored the filter. Left the existing dte(-1) regression test as-is to cover backward compatibility.

Gates:

  • tests (expected to fail), attempt 1: failed — Execution failed for task ':compileTestJava' (registered by plugin class 'org.gradle.api.plugins.JavaBasePlugin'). (9 s)

2. implement

Coder (75 turns, US$ 2.33, 8 min 33 s):

gradle test --no-daemon --console=plain: green (all tests pass after fixing the comma-encoding assertion). gradle build --no-daemon --console=plain: green after one gradle spotlessApply pass fixed Javadoc line-wrap formatting; final build run clean (compile, test, integrationTest compile [execution skipped, no token], jacocoTestCoverageVerification, spotlessCheck, check, build all succeeded).

Added DteFilter (sealed: ValueList/Range/Comparison, each validating 0-36500 inclusive in its own canonical constructor) and a new ExpirationFilter.dte(DteFilter) overload/DteValues variant, covering the API's dte type change (integer -> string) without touching the existing dte(int) single-value overload or its error type. OptionsResource now renders the three new wire forms (comma list, dashed range, operator-prefixed comparison).

  • Resource page/method doc: docs/options/chain.md documents DteFilter and all three forms with a Java example; every new public member has a Javadoc.
  • Every enumerated form has its own wire test (list, range, and all 4 Operator values individually since Operator is a new enum); none beyond what the API describes.
  • Validation holds on every public construction path: factories and direct new DteFilter.ValueList/Range/Comparison(...) all validate (added direct-construction tests for empty list, null element, null operator) — existing dte(int)'s error type is untouched.
  • No coverage exclusions added; JaCoCo HTML report shows full coverage on DteFilter.java, ExpirationFilter.java and OptionsResource.java.
  • Examples (README/client.md/other options docs) show only generic chain usage and weren't claiming filter completeness, so left unchanged; OptionsAdvancedExample.java (not built here) got a DteFilter.range demo added.
  • ADR-008 left unchanged: its sealed-type list is a historical record of the convention at acceptance time, not a living spec, so a later variant doesn't make it wrong.
  • Fixed one test I wrote in phase 1: the comma-list wire assertion compared against the raw (URL-encoded) URI; updated it to decode first, matching the existing ?columns= test convention in this file.
    Outside my limits, nothing else named in the search results referenced dte/chain specifics needing an update (bug.yml, build.gradle.kts, BUG_FINDING.md, and the other unlisted files only matched generically on "options").

Gates:

  • tests, attempt 1: passed (7 s)
  • build, attempt 1: passed (7 s)

3. review 1

Reviewer (18 turns, US$ 2.45, 5 min 24 s): approved

The change adds a sealed DteFilter (list/range/comparison) reached through a new ExpirationFilter.dte(DteFilter) overload, leaving dte(int) intact — purely additive on the public surface (new permitted sealed subtype + new overload), so version impact is minor, not major. All four documented dte forms have exact-wire unit tests (including each of the four new Operator constants), validation holds on the records' canonical constructors as well as the factories, the chain doc page and the advanced example are updated, and all four forms have live tests that assert per-row dte rather than status alone. Only small gaps remain: one live test is weaker than its siblings, a doc sentence overstates where the 36500 bound is enforced, and the inclusive upper edge of that bound is untested.

  • [minor] src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java:176 — chainDteListSelectsMultipleDistinctExpirations only asserts distinctExpirations > 1, so it still passes if the server fails to parse the comma list and falls back to the full chain — the one misbehaviour the list form is most likely to hit, since this is the first SDK sending commas in dte. The sibling range/comparison tests catch that via per-row bounds; add an upper bound here (at most the three requested values, per the API's "closest expiration for each value, deduplicated") or compare the count against the same call without the filter.
  • [minor] src/main/java/com/marketdata/sdk/options/DteFilter.java:15 — The class javadoc enumerates four forms including the single value "handled directly by ExpirationFilter#dte(int)" and then states "Every value, in every form, is a whole number of days in [0, 36500]", but ExpirationFilter.dte(int) rejects only negatives — 40000 is passed through to the server. Scope the sentence to the DteFilter forms (and likewise docs/options/chain.md:54, which sits under the DteFilter heading but reads as global).
  • [minor] src/test/java/com/marketdata/sdk/OptionsResourceTest.java:1313 — The new bound is tested only on the reject side (36501); nothing pins that 36500 itself is accepted, so a regression of days > MAX_DAYS to >= would go unnoticed while the API documents the bound as inclusive. Add one case constructing DteFilter.range(0, 36500) (or comparison(LTE, 36500)) and asserting the wire value.

4. security

Security (4 turns, US$ 0.45, 26 s): approved

This change adds a sealed DteFilter type (list/range/comparison) for the chain endpoint's dte parameter and wires it into the existing query-building path. Values are validated to integers in [0, 36500], operator strings come from a fixed enum, and the resulting value is passed through the existing RequestSpec.Builder.query map, which is percent-encoded the same way every other query parameter already is — no injection, no secrets, no dependency or build changes, and no unsafe defaults are introduced.

  • no findings

5. assess

Analyst (7 turns, US$ 0.14, 56 s) — public surface:

The SDK adds support for the API's extended dte parameter syntax through a new sealed type DteFilter and a new overload ExpirationFilter.dte(DteFilter). The DteFilter interface provides factory methods for comma-separated lists, ranges, and comparison operators on days-to-expiration. The existing ExpirationFilter.dte(int) method is unchanged. All changes are purely additive.

  • added: DteFilter
  • added: DteFilter.list(int, int...)
  • added: DteFilter.range(int, int)
  • added: DteFilter.comparison(DteFilter.Operator, int)
  • added: DteFilter.MAX_DAYS
  • added: DteFilter.Operator
  • added: DteFilter.Operator.GT
  • added: DteFilter.Operator.GTE
  • added: DteFilter.Operator.LT
  • added: DteFilter.Operator.LTE
  • added: DteFilter.Operator.wireValue()
  • added: DteFilter.ValueList
  • added: DteFilter.Range
  • added: DteFilter.Comparison
  • added: ExpirationFilter.dte(DteFilter)
  • added: ExpirationFilter.DteValues

Computed by the pipeline: minor; changelog entry written

6. changelog

Coder (8 turns, US$ 0.10, 47 s):

No build or test commands to run; changelog edit only. File verified with Read tool showing entry correctly added under [Unreleased] / ### Added.

Added changelog entry for DteFilter sealed type supporting multi-value dte filtering on chain endpoint (API 2.0.0): lists three record variants (ValueList, Range, Comparison) with factories, Operator enum (GT/GTE/LT/LTE), new ExpirationFilter.dte(DteFilter) overload, existing dte(int) unchanged, MAX_DAYS constant, validation to [0, 36500].

Gates:

  • build, attempt 1: passed (7 s)

Totals

  • Bump: minor
  • Coder runs: 3
  • Review runs: 2
  • Gates run: 4 (1 failed)
  • Files changed by the agent: 8
  • Turns: 144
  • Tokens: 12,676,754
  • Estimated cost: US$ 6.76
  • Time: 23 min 52 s (agents 23 min 05 s, gates 30 s)

Agent runs

  • coder · claude-haiku-4-5-20251001, claude-sonnet-5 · 2,291,666 tokens (117,719 in, 2,136,115 cached, 37,832 out) · 32 turns · US$ 1.28 · 6 min 59 s
  • coder · claude-sonnet-5 · 8,448,249 tokens (73,493 in, 8,337,676 cached, 37,080 out) · 75 turns · US$ 2.33 · 8 min 33 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 1,348,806 tokens (121,879 in, 1,203,597 cached, 23,330 out) · 18 turns · US$ 2.45 · 5 min 24 s
  • security · claude-haiku-4-5-20251001, claude-sonnet-5 · 260,809 tokens (87,457 in, 171,469 cached, 1,883 out) · 4 turns · US$ 0.45 · 26 s
  • analyst · claude-haiku-4-5-20251001 · 188,585 tokens (38,229 in, 143,233 cached, 7,123 out) · 7 turns · US$ 0.14 · 56 s
  • changelog · claude-haiku-4-5-20251001 · 138,639 tokens (29,816 in, 103,781 cached, 5,042 out) · 8 turns · US$ 0.10 · 47 s

Code review fix 1 — 2026-10-15 14:14:02Z

Outcome: done

Time: 4 min 23 s (agents 4 min 09 s, gates 14 s)

1. code review fix 1

The code review asked for changes:

  • [Should fix] Document the public record variants (src/main/java/com/marketdata/sdk/options/DteFilter.java:96-111)
    Range and Comparison are public records, so their constructors and generated accessors are public SDK surface, but unlike ValueList they have no record Javadocs or parameter descriptions. Add record-level Javadocs covering each component and its constraints.
    Evidence: record Range(int min, int max) implements DteFilter and record Comparison(Operator operator, int days) implements DteFilter have no preceding Javadoc.
    Public-surface comparison:
  • [Should fix] Constrain the live list assertion (src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java:176-178)
    The job log says distinctExpirations > 1 proves the filter was honored, but it also passes if the server treats the list as an unrestricted all-expirations query. Bound the result to at most the three requested expirations or compare it with the same request without the filter, then include the passing live run.
    Evidence: assertThat(distinctExpirations)...isGreaterThan(1);
  • [Should fix] Test the inclusive upper bound (src/test/java/com/marketdata/sdk/OptionsResourceTest.java:1311-1315)
    The tests reject 36501, but none accepts the documented inclusive endpoint 36500; changing the validation from > to >= would stay green. Add a construction or wire test using 36500.
    Evidence: assertThatThrownBy(() -> DteFilter.list(15, 36501)) tests only the value above the boundary.

Coder (22 turns, US$ 0.48, 2 min 35 s):

gradle test --no-daemon --console=plain: green. gradle build --no-daemon --console=plain: failed once on spotlessJavaCheck (line-wrap of the new unfiltered-chain builder call); ran gradle spotlessApply, then gradle build again: green (compile, test, integrationTest compile, jacocoTestCoverageVerification, spotlessCheck, check, build all passed). git status shows only the three expected files modified.

Round-1 fixes: (1) Added record-level Javadocs to DteFilter.Range and DteFilter.Comparison documenting each component and its [0, 36500] constraint. (2) chainDteListSelectsMultipleDistinctExpirations now fetches the same chain request without the dte filter and asserts the filtered result is both bounded (≤3 distinct expirations, matching the 3 requested values) and strictly greater than the unfiltered front-month count, so a server that ignores the comma list or falls back to the full chain fails the test. (3) Added dteFilterRangeAcceptsInclusiveMaxBoundary, constructing DteFilter.range(0, 36500) and asserting max() is 36500, covering the documented inclusive upper bound that only the rejection side had before. No public-surface or behavior change, so CHANGELOG.md is left as is.

Gates:

  • tests, attempt 1: passed (7 s)
  • build, attempt 1: passed (7 s)

2. review 1

Reviewer (7 turns, US$ 0.89, 1 min 28 s): approved

The fix resolves all three review findings: Range and Comparison now carry per-component Javadoc matching ValueList's existing style, the live dte-list test is bounded to at most the three requested expirations and compared against the same request without the filter (so it fails if the server ignores the list), and a construction test accepts the inclusive 36500 endpoint, which kills a > → >= mutation in the shared validate. No behaviour or public surface changed, so nothing in CHANGELOG.md or docs/options/chain.md goes stale.

  • [minor] src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java:177 — The unfiltered baseline is used as a comparison without being asserted non-empty; if that call came back with no rows, isGreaterThan(0) would pass on a single expiration and the comparison would prove nothing. Add assertThat(unfiltered).isNotEmpty(); after the baseline call.

3. security

Security (2 turns, US$ 0.24, 6 s): approved

The fix only adds Javadoc to two existing records, tightens an integration test's assertion on dte-list expiration counts, and adds a unit test for the inclusive dte range boundary. None of these changes affect request construction, parsing, credentials, or any other security-relevant behavior; no findings.

  • no findings

@codecov

codecov Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.31%. Comparing base (d3519f0) to head (2d528c5).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff              @@
##               main      #97      +/-   ##
============================================
+ Coverage     98.27%   98.31%   +0.03%     
- Complexity     1043     1057      +14     
============================================
  Files           123      124       +1     
  Lines          2606     2664      +58     
  Branches        301      310       +9     
============================================
+ Hits           2561     2619      +58     
  Partials         45       45              
Files with missing lines Coverage Δ
.../main/java/com/marketdata/sdk/OptionsResource.java 98.61% <100.00%> (+0.08%) ⬆️
...ain/java/com/marketdata/sdk/options/DteFilter.java 100.00% <100.00%> (ø)
...a/com/marketdata/sdk/options/ExpirationFilter.java 95.83% <100.00%> (+0.83%) ⬆️

Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 682a304...2d528c5. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@marketdata-code-review

marketdata-code-review Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

✅ Ready — Code review

Adds an additive DteFilter public API for list, range, and comparison forms while preserving the existing dte(int) overload. Version impact: minor; all touched public symbols are additions, and the added ExpirationFilter permitted subtype is explicitly non-breaking for this SDK.

Rating patch 6/6 (exemplary) · proof 6/6 (comprehensive) · overall 6/6

Since last review

  • Resolved: 3fa29bc6, 48525f90, d4d8428d
  • 0 still open, 0 new

Reviewed 2d528c5 · revision 2 · codex (gpt-5.6-sol) · claude unavailable · rules: default, sdk

code review fix 1: Round-1 fixes: (1) Added record-level Javadocs to `DteFilter.Range` and `DteFilter.Comparison` documenting each component and its [0, 36500] constraint. (2) `chainDteListSelectsMultipleDistinctExpirations` now fetches the same chain request without the dte filter and asserts the filtered result is both bounded (≤3 distinct expirations, matching the 3 requested values) and strictly greater than the unfiltered front-month count, so a server that ignores the comma list or falls back to the full chain fails the test. (3) Added `dteFilterRangeAcceptsInclusiveMaxBoundary`, constructing `DteFilter.range(0, 36500)` and asserting `max()` is 36500, covering the documented inclusive upper bound that only the rejection side had before. No public-surface or behavior change, so `CHANGELOG.md` is left as is.
@marketdata-sdk-sync marketdata-sdk-sync Bot removed the sdk-sync: in progress sdk-sync is still working on this PR: CI, code review, fixes label Oct 15, 2026
@MarketDataDev03

Copy link
Copy Markdown
Collaborator

Closing to re-run the SDK sync for API 2.0.0 with the pipeline's per-language guidelines and checks.

@MarketDataDev03
MarketDataDev03 deleted the sdk-sync/2.0.0-ffb34b7 branch October 29, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

minor adds to the SDK's public surface and breaks nothing review: ready

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant