Repository navigation
sdk-sync: API 2.0.0+ffb34b7 → sdk-java (minor) - #97
marketdata-sdk-sync[bot] wants to merge 2 commits into
Conversation
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].
🧾 Job log — sdk-syncsdk-auto-sync job log
Changes in the API surface1. testsCoder (32 turns, US$ 1.28, 6 min 59 s):
Gates:
2. implementCoder (75 turns, US$ 2.33, 8 min 33 s):
Gates:
3. review 1Reviewer (18 turns, US$ 2.45, 5 min 24 s): approved
4. securitySecurity (4 turns, US$ 0.45, 26 s): approved
5. assessAnalyst (7 turns, US$ 0.14, 56 s) — public surface:
Computed by the pipeline: minor; changelog entry written 6. changelogCoder (8 turns, US$ 0.10, 47 s):
Gates:
Totals
Agent runs
Code review fix 1 — 2026-10-15 14:14:02ZOutcome: done Time: 4 min 23 s (agents 4 min 09 s, gates 14 s) 1. code review fix 1The code review asked for changes:
Coder (22 turns, US$ 0.48, 2 min 35 s):
Gates:
2. review 1Reviewer (7 turns, US$ 0.89, 1 min 28 s): approved
3. securitySecurity (2 turns, US$ 0.24, 6 s): approved
|
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
✅ Ready — Code reviewAdds 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
Reviewed |
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.
|
Closing to re-run the SDK sync for API 2.0.0 with the pipeline's per-language guidelines and checks. |
Generated by sdk-auto-sync for API release 2.0.0 (commit
ffb34b7).Changes in the API surface
Snapshots
ae2b047c8f6f→c2a31e277345: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 newExpirationFilter.dte(DteFilter)overload/DteValuesvariant, covering the API's dte type change (integer -> string) without touching the existingdte(int)single-value overload or its error type. OptionsResource now renders the three new wire forms (comma list, dashed range, operator-prefixed comparison).new DteFilter.ValueList/Range/Comparison(...)all validate (added direct-construction tests for empty list, null element, null operator) — existingdte(int)'s error type is untouched.?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.mddocs/options/chain.mdexamples/consumer-test/src/main/java/com/marketdata/examples/resources/OptionsAdvancedExample.javasrc/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.javasrc/main/java/com/marketdata/sdk/OptionsResource.javasrc/main/java/com/marketdata/sdk/options/DteFilter.javasrc/main/java/com/marketdata/sdk/options/ExpirationFilter.javasrc/test/java/com/marketdata/sdk/OptionsResourceTest.javaVersion
Public-surface change computed by the pipeline: minor
DteFilterDteFilter.list(int, int...)DteFilter.range(int, int)DteFilter.comparison(DteFilter.Operator, int)DteFilter.MAX_DAYSDteFilter.OperatorDteFilter.Operator.GTDteFilter.Operator.GTEDteFilter.Operator.LTDteFilter.Operator.LTEDteFilter.Operator.wireValue()DteFilter.ValueListDteFilter.RangeDteFilter.ComparisonExpirationFilter.dte(DteFilter)ExpirationFilter.DteValuesLive-API suite
src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.javaFiles 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-235a3f417767Agent runs