Repository navigation
sdk-sync: API 2.0.0+ffb34b7 → sdk-java (minor) - #104
marketdata-sdk-sync[bot] wants to merge 1 commit into
Conversation
tests: Added wire tests (OptionsResourceTest.java) for the 4 forms the API now describes for `dte`: single value (regression, plus a new test proving the pre-existing dte(int) keeps accepting out-of-range values unchanged), comma list (dteList), closed range (dteRange), and comparison operator (dteComparison, with >= and < per the two operator examples given). Added validation tests for the three new factories (empty list, negative, >36500, min>max). Added 4 live integration tests in OptionsIntegrationTest.java covering each form against real AAPL expirations, anchored on values from an ExpirationFilter.all() call (never the unfiltered default) so each assertion fails against the unfiltered answer. The design adds new ExpirationFilter permitted variants/factories only — the existing dte(int) factory is untouched and unbroken, so no SdkSyncCompatProbe.java was needed (delta is purely additive).
implement: Implemented the `dte` string-syntax delta by adding three new permitted `ExpirationFilter` sealed variants — `dteList`/`dteRange`/`dteComparison` (reusing `StrikeFilter.Operator`) — alongside the unchanged `dte(int)`, wired into `OptionsResource`'s query serialization, with every bound validated in each record's own compact constructor so direct construction is covered too.
- Docs: new methods documented with javadoc and an example (docs/options/chain.md, OptionsAdvancedExample.java); every new form has a wire test (unit) and all four forms have a live-anchor integration test.
- New-type validation: compact constructors enforce non-empty/bounds/ordering on every public construction path, not just the factories; `List.copyOf` rejects null elements.
- Coverage: 100% line coverage verified by the existing JaCoCo gate, no new `@Generated` exclusions.
- Existing surface: `dte(int)` kept its exact signature and error contract (no upper-bound check added there); added a regression test proving it still accepts out-of-range values unchanged.
- Fixed one phase-1 test (`chainExpirationFilterDteListTranslatesToCommaSeparatedDte`): it asserted a literal comma on the wire, but the transport's existing query encoder percent-encodes commas (confirmed by the pre-existing `columns` tests, which URL-decode first) — updated it to decode the URL before asserting, same as the repo's established pattern.
- Live-test self-check: all four integration tests anchor on real values from an `ExpirationFilter.all()` call (never the unfiltered default) and each assertion was checked to fail against the unfiltered single-front-month answer.
- README.md, docs/client.md, docs/options/{quotes,expirations,lookup,README}.md, docs/.sync-manifest.txt, MarketDataClient.java, OptionsCsvResource.java, OptionsHtmlResource.java, OptionsChain.java, JsonResponseParserTest.java, RequestValidationTest.java, OptionsExample.java: left unchanged — none reference `dte`'s filter syntax specifically, only the unrelated `chain`/`ExpirationFilter.all()` paths, which remain correct.
- Left outside limits: ADR-008's Context narrative still lists only the original `OnDate/Dte/Between/MonthYear/All` variants (now incomplete) and ADR-006 mentions `chain(` generically — both historical decision records, not updated per repo convention of not revising accepted ADRs for routine additions within their own convention.
changelog: Added changelog entry under `## [Unreleased]` documenting `ExpirationFilter.dteList(List<Integer>)`, `ExpirationFilter.dteRange(int, int)`, and `ExpirationFilter.dteComparison(StrikeFilter.Operator, int)` — the three new factories that implement API 2.0.0's string-syntax forms for the `dte` parameter (comma-separated list, closed range, comparison operator). Entry notes that `dte(int)` remains unchanged. The three new permitted subtypes (`DteList`, `DteRange`, `DteComparison`) are not listed separately per the repo's rule 9 (sealed-type additions).
🧾 Job log — sdk-syncsdk-auto-sync job log
Changes in the API surface1. testsCoder (45 turns, US$ 1.81, 9 min 22 s):
The pipeline:
Gates:
2. implementCoder (82 turns, US$ 2.73, 9 min 03 s):
Gates:
3. review 1Reviewer (13 turns, US$ 1.96, 4 min 23 s): approved
4. securitySecurity (2 turns, US$ 0.38, 15 s): approved
5. assessAnalyst (2 turns, US$ 0.18, 21 s) — public surface:
Computed by the pipeline: minor; changelog entry written 6. changelogCoder (7 turns, US$ 0.07, 25 s):
Gates:
Questions for a personThe internal reviewers raised these for a person to answer. They did not block the change, and the coder was not asked to resolve them.
Totals
Agent runs
CI repair 1 — 2026-11-03 16:04:12ZOutcome: failed — the agent changed no files Time: 2 min 59 s (agents 2 min 59 s, gates 0 s) 1. CI fix 1Coder (16 turns, US$ 0.46, 2 min 59 s):
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #104 +/- ##
============================================
+ Coverage 98.27% 98.29% +0.02%
- Complexity 1043 1052 +9
============================================
Files 123 123
Lines 2606 2639 +33
Branches 301 308 +7
============================================
+ Hits 2561 2594 +33
Partials 45 45
Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
🙋 Needs a person — sdk-syncWhy: CI repair 1: the CI failure does not seem to be in the code; the agent found nothing to change · failures/2026-11-03T16-04-12Z_sdk-java_2.0.0_ci.md Failed checks
Code-review fix rounds used: 0 of 2 · CI repairs used: 1 of 2 What to do
This pull request is back to draft and labelled |
|
Closing to re-run the SDK sync for API 2.0.0 on all six SDKs, now that the earnings endpoint is fixed. |
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 wire tests (OptionsResourceTest.java) for the 4 forms the API now describes for
dte: single value (regression, plus a new test proving the pre-existing dte(int) keeps accepting out-of-range values unchanged), comma list (dteList), closed range (dteRange), and comparison operator (dteComparison, with >= and < per the two operator examples given). Added validation tests for the three new factories (empty list, negative, >36500, min>max). Added 4 live integration tests in OptionsIntegrationTest.java covering each form against real AAPL expirations, anchored on values from an ExpirationFilter.all() call (never the unfiltered default) so each assertion fails against the unfiltered answer. The design adds new ExpirationFilter permitted variants/factories only — the existing dte(int) factory is untouched and unbroken, so no SdkSyncCompatProbe.java was needed (delta is purely additive).implement: Implemented the
dtestring-syntax delta by adding three new permittedExpirationFiltersealed variants —dteList/dteRange/dteComparison(reusingStrikeFilter.Operator) — alongside the unchangeddte(int), wired intoOptionsResource's query serialization, with every bound validated in each record's own compact constructor so direct construction is covered too.List.copyOfrejects null elements.@Generatedexclusions.dte(int)kept its exact signature and error contract (no upper-bound check added there); added a regression test proving it still accepts out-of-range values unchanged.chainExpirationFilterDteListTranslatesToCommaSeparatedDte): it asserted a literal comma on the wire, but the transport's existing query encoder percent-encodes commas (confirmed by the pre-existingcolumnstests, which URL-decode first) — updated it to decode the URL before asserting, same as the repo's established pattern.ExpirationFilter.all()call (never the unfiltered default) and each assertion was checked to fail against the unfiltered single-front-month answer.dte's filter syntax specifically, only the unrelatedchain/ExpirationFilter.all()paths, which remain correct.OnDate/Dte/Between/MonthYear/Allvariants (now incomplete) and ADR-006 mentionschain(generically — both historical decision records, not updated per repo convention of not revising accepted ADRs for routine additions within their own convention.changelog: Added changelog entry under
## [Unreleased]documentingExpirationFilter.dteList(List<Integer>),ExpirationFilter.dteRange(int, int), andExpirationFilter.dteComparison(StrikeFilter.Operator, int)— the three new factories that implement API 2.0.0's string-syntax forms for thedteparameter (comma-separated list, closed range, comparison operator). Entry notes thatdte(int)remains unchanged. The three new permitted subtypes (DteList,DteRange,DteComparison) are not listed separately per the repo's rule 9 (sealed-type additions).Questions for a person
The internal reviewers raised these for a person to answer. They did not block the change, and the coder was not asked to resolve them.
src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.java:243— Question for a person, not for the author: the API'sdtedescription says a comparison operator "(>=30, <45) returns every expiration whose dte falls within the bounds, inclusive", but "inclusive" cannot hold for<45. The live run ofchainDteComparisonGteIncludesBoundaryLtExcludesIt(requestdte=<Mon AAPL, M = the largest live dte) came back without M, i.e.<is strictly exclusive, which is what "the syntax matches strike and delta" implies; the test and the SDK text follow that reading and are not findings. Please confirm with the API team which forms the word "inclusive" is meant to cover.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.dteList(List<Integer>)— New static factory; does not alter the existing dte(int) factory or any other overload.ExpirationFilter.dteRange(int, int)— New static factory; purely additive.ExpirationFilter.dteComparison(StrikeFilter.Operator, int)— New static factory; purely additive.ExpirationFilter.DteList— New permitted subtype of the sealed ExpirationFilter interface; per repo rule 9 this is additive (an exhaustive switch gains a new case to handle) and the sealed parent ExpirationFilter is not listed as changed.ExpirationFilter.DteRange— New permitted subtype of the sealed ExpirationFilter interface; additive per repo rule 9, same reasoning as DteList.ExpirationFilter.DteComparison— New permitted subtype of the sealed ExpirationFilter interface; additive per repo rule 9, same reasoning as DteList.Live-API suite
src/integrationTest/java/com/marketdata/sdk/OptionsIntegrationTest.javaFiles of this suite changed by this pull request. The pipeline ran the ones the change added or modified against the live API before the pull request, and they passed; this pull request's CI runs the whole suite.
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) · 151 turns · 14,992,067 tokens · US$ 7.12 · item
5c097984-5f7b-401b-abba-235a3f417767Agent runs