Repository navigation
sdk-sync: API 2.0.0+ffb34b7 → sdk-java (minor) - #94
marketdata-sdk-sync[bot] wants to merge 3 commits into
Conversation
tests: Build fails as expected (compilation errors for not-yet-implemented symbols), confirming phase-1 tests are in place. Integration test file wasn't reached since unit test compilation already failed first — expected, not run by this command anyway.
Added wire, validation, regression, and integration tests for the `dte` parameter's type change (integer → string) in `OptionsResourceTest.java` and `OptionsIntegrationTest.java`:
- Wire tests: single value (existing, unchanged), new `dteList` (comma-separated), `dteRange` (closed range), and `dteComparison` for each of the four operators (GT/GTE/LT/LTE).
- Regression: the pre-existing `dte(int)` factory still accepts a value above the new 36500 upper bound and sends it to the wire unchanged — no new check added to it.
- Validation: negative and above-36500 values rejected for the three new factories, plus min>max for `dteRange` — all on newly-added methods, so no existing caller's error type changes.
- Integration: one test per form (single/list/range/comparison) against the live chain endpoint, asserting shape (distinct-expiration counts, bounds satisfied) rather than exact server-side "closest" picks.
`gradle test --no-daemon --console=plain` fails to compile as expected (`dteList`/`dteRange`/`dteComparison` don't exist yet).
implement: Both green.
Implemented `dte`'s type change (integer → string) on `/v1/options/chain/`: added three new `ExpirationFilter` variants (`DteList`, `DteRange`, `DteComparison`) covering the comma-list, closed-range and comparison forms, alongside the unchanged single-value `Dte`, reusing `StrikeFilter.Operator` for the shared comparison syntax.
- Documentation: `docs/options/chain.md` now lists and demonstrates all four `dte` forms.
- Doc comments: every new factory and record carries its own Javadoc.
- Wire test per form/value: already written in phase 1 (list, range, GT/GTE/LT/LTE each asserted individually); unchanged here.
- Validation on every construction path: compact constructors on the new records enforce bounds/non-null directly (not only the factories), with added tests constructing `DteList` directly (empty, null list, null element).
- Coverage: verified via the JaCoCo HTML report — no uncovered lines/branches in the touched classes; no exclusions added.
- Examples/README: `OptionsAdvancedExample.java` gained a `dteComparison` demo; `OptionsExample.java`, `README.md`, `docs/client.md`, `docs/options/{README,quotes,expirations,lookup}.md`, `docs/.sync-manifest.txt`, ADR-006/ADR-008 left unchanged — their "chain"/"expiration" matches are unrelated (CompletableFuture chaining, other endpoints, or the ADR's historical decision record, which a non-breaking sealed-type addition doesn't invalidate).
The existing `dte(int)` factory keeps its original check only (no upper bound added), confirmed by a regression test that a value above 36500 still reaches the wire unchanged.
changelog: Added changelog entry under `## [Unreleased]` documenting the three new `ExpirationFilter` dte factory methods (`dteList`, `dteRange`, `dteComparison`) for API 2.0.0's expanded string `?dte` parameter forms.
🧾 Job log — sdk-syncsdk-auto-sync job log
Changes in the API surface1. testsCoder (24 turns, US$ 1.01, 5 min 14 s):
Gates:
2. implementCoder (56 turns, US$ 1.93, 5 min 29 s):
Gates:
3. review 1Reviewer (10 turns, US$ 1.80, 4 min 16 s): approved
4. securitySecurity (2 turns, US$ 0.39, 15 s): approved
5. assessAnalyst (6 turns, US$ 0.15, 1 min 27 s) — public surface:
Computed by the pipeline: minor; changelog entry written 6. changelogCoder (4 turns, US$ 0.07, 19 s):
Gates:
Totals
Agent runs
Code review fix 1 — 2026-10-14 12:59:10ZOutcome: done Time: 5 min 49 s (agents 5 min 36 s, gates 13 s) 1. code review fix 1The code review asked for changes:
Coder (28 turns, US$ 0.65, 4 min 06 s):
Gates:
2. review 1Reviewer (5 turns, US$ 0.56, 1 min 21 s): approved
3. securitySecurity (2 turns, US$ 0.15, 9 s): approved
Code review fix 2 — 2026-10-14 13:15:56ZOutcome: done Time: 7 min 08 s (agents 6 min 55 s, gates 13 s) 1. code review fix 2The code review asked for changes:
Coder (23 turns, US$ 0.86, 5 min 04 s):
Gates:
2. review 1Reviewer (10 turns, US$ 0.65, 1 min 51 s): approved
3. securityThe pipeline:
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #94 +/- ##
============================================
+ Coverage 98.27% 98.29% +0.02%
- Complexity 1043 1053 +10
============================================
Files 123 123
Lines 2606 2644 +38
Branches 301 309 +8
============================================
+ Hits 2561 2599 +38
Partials 45 45
Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
✅ Ready — Code reviewAdds additive DTE list, range, and comparison filters for option-chain requests, with documentation, validation, wire-format tests, and live API coverage. Version impact: minor. Rating patch 6/6 (exemplary) · proof 6/6 (comprehensive) · overall 6/6 Since last review
Reviewed |
code review fix 1: Both green from a clean build. - List test accepts an ignored filter: Replaced the `isBetween(1, 3)` assertion with `chainDteCommaListMatchesUnionOfSingleDteRequests`, which compares `dteList(15, 30, 45)`'s resulting expiration set against the union of the three corresponding single-`dte` requests — a comma-list ignored by the server would fall back to the front-month expiration and fail to match that union. - Comparison test excludes an inclusive bound: Changed the comparison test from `Operator.LT, 45` / `isLessThan(45)` to `Operator.LTE, 45` / `isLessThanOrEqualTo(45)`, matching the API's documented inclusive bounds. - DTE docs omit date and limit behavior: Added a shared note on `ExpirationFilter`'s interface Javadoc that all `dte*` variants count days from the chain request's `date` when set, or from today; added a note on `dte(int)` specifically that the API's max is 36500 and that, unlike the three new variants, this legacy factory doesn't enforce it locally; mirrored both notes in `docs/options/chain.md`. No CHANGELOG change was needed — nothing here alters behavior or the public surface, only tests and documentation. `gradle test` and `gradle build` (including Spotless, which required `spotlessApply` to reformat the new lines) both pass from a clean build.
code review fix 2: Only the integration test file changed, within limits. No CHANGELOG update needed since this round changes only integration test assertions, no behavior or public-surface change. Finding 1 (dte filtering not proven): Rewrote the four dte integration tests so each one can fail on an ignored/broken parameter: the single-value test now compares `dte(365)` against an explicit unfiltered-chain baseline and asserts the expiration differs; the list test now requires more than one distinct expiration (on top of the existing union check) using near/mid/far values (15/180/365); the range and comparison tests now use bounds (`[90, 365]`, `GTE 90`) that the front-month default cannot satisfy, instead of `[0,45]`/`LTE 45` which the unfiltered chain also happens to pass. Finding 2 (wall-clock dependency): Added a `FIXED_CHAIN_DATE` constant (`2025-06-02`, a historical NYSE trading day) and passed `.date(FIXED_CHAIN_DATE)` to every chain call used by these tests, so `dte` is always computed from that fixed day rather than from "today," removing the Eastern-midnight rollover risk between sequential requests. Ran `gradle test --no-daemon --console=plain` and `gradle build --no-daemon --console=plain` (plus `spotlessApply` for formatting); both pass. The new/changed assertions are not run here — no `MARKETDATA_TOKEN` is configured, consistent with the brief.
|
Closing to re-run the pipeline for this API release from scratch. |
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: Build fails as expected (compilation errors for not-yet-implemented symbols), confirming phase-1 tests are in place. Integration test file wasn't reached since unit test compilation already failed first — expected, not run by this command anyway.
Added wire, validation, regression, and integration tests for the
dteparameter's type change (integer → string) inOptionsResourceTest.javaandOptionsIntegrationTest.java:dteList(comma-separated),dteRange(closed range), anddteComparisonfor each of the four operators (GT/GTE/LT/LTE).dte(int)factory still accepts a value above the new 36500 upper bound and sends it to the wire unchanged — no new check added to it.dteRange— all on newly-added methods, so no existing caller's error type changes.gradle test --no-daemon --console=plainfails to compile as expected (dteList/dteRange/dteComparisondon't exist yet).implement: Both green.
Implemented
dte's type change (integer → string) on/v1/options/chain/: added three newExpirationFiltervariants (DteList,DteRange,DteComparison) covering the comma-list, closed-range and comparison forms, alongside the unchanged single-valueDte, reusingStrikeFilter.Operatorfor the shared comparison syntax.docs/options/chain.mdnow lists and demonstrates all fourdteforms.DteListdirectly (empty, null list, null element).OptionsAdvancedExample.javagained adteComparisondemo;OptionsExample.java,README.md,docs/client.md,docs/options/{README,quotes,expirations,lookup}.md,docs/.sync-manifest.txt, ADR-006/ADR-008 left unchanged — their "chain"/"expiration" matches are unrelated (CompletableFuture chaining, other endpoints, or the ADR's historical decision record, which a non-breaking sealed-type addition doesn't invalidate).The existing
dte(int)factory keeps its original check only (no upper bound added), confirmed by a regression test that a value above 36500 still reaches the wire unchanged.changelog: Added changelog entry under
## [Unreleased]documenting the three newExpirationFilterdte factory methods (dteList,dteRange,dteComparison) for API 2.0.0's expanded string?dteparameter forms.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/ExpirationFilter.javasrc/test/java/com/marketdata/sdk/OptionsResourceTest.javaVersion
Public-surface change computed by the pipeline: minor
ExpirationFilter.DteListExpirationFilter.dteList(int, int[])ExpirationFilter.DteRangeExpirationFilter.dteRange(int, int)ExpirationFilter.DteComparisonExpirationFilter.dteComparison(StrikeFilter.Operator, int)Live-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) · 102 turns · 10,248,543 tokens · US$ 5.34 · item
5c097984-5f7b-401b-abba-235a3f417767Agent runs