Skip to content

sdk-sync: API 1.4.0+f19c2d4 → sdk-java 2.0.0 (major) - #7

Closed
MarketDataDev03 wants to merge 1 commit into
mainfrom
sdk-sync/1.4.0-f19c2d4
Closed

MarketDataDev03 wants to merge 1 commit into
mainfrom
sdk-sync/1.4.0-f19c2d4

Conversation

@MarketDataDev03

Copy link
Copy Markdown
Owner

Generated by sdk-auto-sync for API release 1.4.0 (commit f19c2d4).

Changes in the API surface

Snapshots 9c18fbb1f58e → 72b3d15f59ad:

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

What the agent did

tests: Only the test file was touched, as required.

Summary: Added tests in OptionsResourceTest.java specifying the new dte range behavior for GET /v1/options/chain/{underlying}/ now that ?dte= is a string rather than a plain integer:

  • chainExpirationFilterDteRangeTranslatesToDashedDteParam — expects a new ExpirationFilter.dteRange(min, max) factory to render the wire form ?dte=MIN-MAX, mirroring the existing StrikeFilter.range "MIN-MAX" convention already used for the sibling strike parameter.
  • expirationFilterDteRangeRejectsNegativeMin — expects the same non-negative validation message as the existing single-value ExpirationFilter.dte(int).
  • expirationFilterDteRangeRejectsMinGreaterThanMax — expects a min must be <= max validation error, matching StrikeFilter.range's existing message convention.

Ran gradle test --no-daemon --console=plain: it fails at compileTestJava with "cannot find symbol: method dteRange(int,int)" on ExpirationFilter, confirming the tests correctly specify not-yet-implemented behavior. No production code was modified.

implement: All changes stay within the allowed paths (src/main/java, src/test/java, docs), and no build.gradle*/settings.gradle*/CI/gradle-wrapper files were touched. Nothing was committed.

Summary for the PR:

  • Widened the options chain dte filter to match the API's 1.4.0 change of ?dte from integer to string: added ExpirationFilter.dteRange(int min, int max), a new sealed variant (ExpirationFilter.DteRange) that renders as ?dte=MIN-MAX, mirroring the existing StrikeFilter.range dashed-string convention already used for ?strike=.
  • Wired the new variant into OptionsResource.applyExpirationFilter alongside the existing Dte/Between/MonthYear handling; the pre-existing single-value ExpirationFilter.dte(int) (?dte=N) is unchanged.
  • Validation on dteRange mirrors the sibling factories: non-negative min (same message as dte(int)) and min <= max (same message as StrikeFilter.range).
  • Updated docs/options/chain.md to list the new dteRange filter alongside the other ExpirationFilter variants.
  • No test changes were needed beyond what was written in phase 1 — all phase-1 tests pass unmodified; gradle test and gradle build (including Spotless and JaCoCo) both succeed.

changelog: Added an [Unreleased] entry documenting the new ExpirationFilter.dteRange/DteRange API (responding to Market Data API 1.4.0's dte int→string change) under ### Added, plus a ### Changed BREAKING note explaining the new sealed permit breaks non-default exhaustive switches over ExpirationFilter and how to migrate.

Files

  • CHANGELOG.md
  • docs/options/chain.md
  • src/main/java/com/marketdata/sdk/OptionsResource.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: major — next version 2.0.0 (from 1.0.0).

  • changed: ExpirationFilter.permits — Sealed permits list gains ExpirationFilter.DteRange alongside OnDate, Dte, Between, MonthYear, All. Any consumer code that pattern-matches/switches exhaustively over ExpirationFilter without a default branch will no longer compile until a DteRange case is added.
  • added: ExpirationFilter.dteRange(int, int) — New static factory returning ExpirationFilter.DteRange; throws IllegalArgumentException if min < 0 ("dte must be non-negative") or min > max ("min must be <= max").
  • added: ExpirationFilter.DteRange — New public record variant of ExpirationFilter with components int min() and int max() and a public canonical constructor DteRange(int min, int max); serializes to the wire form ?dte=MIN-MAX via OptionsResource's internal query-building (package-private, not itself public surface).

Reviewer notes

  • none

Job log

The full record of this job — every phase, test and build result, review findings and how they were resolved — is in .sdk-sync/1.4.0-f19c2d4.md on this branch.


3 coder run(s) · 2 review(s) · 48 turns · 2,539,208 tokens · US$ 1.60 · item 79663cca-7c85-4584-bbeb-401d476852c8

Agent runs
  • coder · claude-haiku-4-5-20251001, claude-sonnet-5 · 1,251,821 tokens (57,249 in, 1,179,388 cached, 15,184 out) · 26 turns · US$ 0.62
  • coder · claude-sonnet-5 · 881,153 tokens (8,074 in, 869,880 cached, 3,199 out) · 12 turns · US$ 0.24
  • reviewer · claude-haiku-4-5-20251001, claude-sonnet-5 · 62,802 tokens (56,060 in, 0 cached, 6,742 out) · 2 turns · US$ 0.32
  • security · claude-haiku-4-5-20251001, claude-sonnet-5 · 56,482 tokens (49,514 in, 6,534 cached, 434 out) · 2 turns · US$ 0.23
  • analyst · claude-haiku-4-5-20251001, claude-sonnet-5 · 49,146 tokens (24,494 in, 22,451 cached, 2,201 out) · 3 turns · US$ 0.13
  • coder · claude-sonnet-5 · 237,804 tokens (3,536 in, 233,478 cached, 790 out) · 3 turns · US$ 0.07

tests: Only the test file was touched, as required.

Summary: Added tests in `OptionsResourceTest.java` specifying the new `dte` range behavior for `GET /v1/options/chain/{underlying}/` now that `?dte=` is a string rather than a plain integer:

- `chainExpirationFilterDteRangeTranslatesToDashedDteParam` — expects a new `ExpirationFilter.dteRange(min, max)` factory to render the wire form `?dte=MIN-MAX`, mirroring the existing `StrikeFilter.range` "MIN-MAX" convention already used for the sibling `strike` parameter.
- `expirationFilterDteRangeRejectsNegativeMin` — expects the same non-negative validation message as the existing single-value `ExpirationFilter.dte(int)`.
- `expirationFilterDteRangeRejectsMinGreaterThanMax` — expects a `min must be <= max` validation error, matching `StrikeFilter.range`'s existing message convention.

Ran `gradle test --no-daemon --console=plain`: it fails at `compileTestJava` with "cannot find symbol: method dteRange(int,int)" on `ExpirationFilter`, confirming the tests correctly specify not-yet-implemented behavior. No production code was modified.

implement: All changes stay within the allowed paths (`src/main/java`, `src/test/java`, `docs`), and no `build.gradle*`/`settings.gradle*`/CI/gradle-wrapper files were touched. Nothing was committed.

Summary for the PR:

- Widened the options chain `dte` filter to match the API's `1.4.0` change of `?dte` from `integer` to `string`: added `ExpirationFilter.dteRange(int min, int max)`, a new sealed variant (`ExpirationFilter.DteRange`) that renders as `?dte=MIN-MAX`, mirroring the existing `StrikeFilter.range` dashed-string convention already used for `?strike=`.
- Wired the new variant into `OptionsResource.applyExpirationFilter` alongside the existing `Dte`/`Between`/`MonthYear` handling; the pre-existing single-value `ExpirationFilter.dte(int)` (`?dte=N`) is unchanged.
- Validation on `dteRange` mirrors the sibling factories: non-negative `min` (same message as `dte(int)`) and `min <= max` (same message as `StrikeFilter.range`).
- Updated `docs/options/chain.md` to list the new `dteRange` filter alongside the other `ExpirationFilter` variants.
- No test changes were needed beyond what was written in phase 1 — all phase-1 tests pass unmodified; `gradle test` and `gradle build` (including Spotless and JaCoCo) both succeed.

changelog: Added an `[Unreleased]` entry documenting the new `ExpirationFilter.dteRange`/`DteRange` API (responding to Market Data API 1.4.0's `dte` int→string change) under `### Added`, plus a `### Changed` BREAKING note explaining the new sealed permit breaks non-`default` exhaustive switches over `ExpirationFilter` and how to migrate.
@MarketDataDev03
MarketDataDev03 marked this pull request as ready for review September 16, 2026 12:53
@MarketDataDev03
MarketDataDev03 deleted the sdk-sync/1.4.0-f19c2d4 branch September 16, 2026 13:10
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.

1 participant