Skip to content

sdk-sync: API 2.0.0+ffb34b7 → sdk-py (minor) - #175

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

marketdata-sdk-sync[bot] wants to merge 1 commit into
mainfrom
sdk-sync/2.0.0-ffb34b7

Conversation

@marketdata-sdk-sync

@marketdata-sdk-sync marketdata-sdk-sync Bot commented Oct 29, 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 wire tests in test_options_chain.py for the four new dte forms the API now accepts (comma-separated list, closed range, >= and < operators), plus the pre-existing single-value int/str forms as regression, parametrizing test_options_chain_input_days_to_expiration_forms_on_wire. Added live integration tests in test_options_live.py (single-value narrowing, comma-list dedup against per-value ground truth, closed-range inclusive endpoints, >= and < boundary inclusion/exclusion), using module-scoped fixtures at dte 15/30/45 to anchor assertions in real data instead of server defaults. Wrote the compatibility probe calling OptionsChainInput(symbol=..., dte=<int>), the only existing public member this delta touches.

implement: Widened OptionsChainInput.days_to_expiration (alias dte) from int | None to str | int | None, since the API's dte query parameter now also reads a string expression (comma list, closed range, comparison operator), matching strike/delta syntax; a bare int is still sent unchanged.

  • Docs with example: updated docs/options.md's days_to_expiration bullet and added a "Filter by days to expiration" example showing all four forms.
  • New member docstrings: none added; only the existing field's Field(description=...) was updated to state the new forms.
  • Wire test per new form: four phase-1 tests (comma list, closed range, >=, <) plus the regression single-value int/str case all pass against the new union type.
  • Validation of a new type on every construction path, empty/null handling: not applicable, no new type was introduced; the field stays a plain str | int | None, pass-through to the API as strike/delta already do.
  • Coverage: confirmed 100% (--cov=marketdata), no new branches added.
  • Examples/docs correctness: re-checked README.md and examples/, neither mentions days_to_expiration/dte, so neither was touched.
  • Existing parameter keeps accepting its old type: int still type-checks and serializes identically (dte=30), confirmed by the full suite; the phase-1 probe (which only used today's int) has since been removed from the checkout by the pipeline, as expected.
  • No disagreement between live API and documentation to report; I could not run the live suite here, and the new docs/tests only restate the API's own published description of dte.
    Files named in the brief but left unchanged, with reason: src/marketdata/output_types/options_chain.py and options_quotes.py (the response's dte field is still list[int], unaffected — this delta is request-side only); src/marketdata/resources/options/chain.py and lookup.py (matched on the word "options", not dte); README.md, the stocks_news fixtures, test_fan_out_retry.py, test_client.py, test_response_meta*.py, test_status_mapping.py, test_money_decimal.py, test_options_expirations.py, test_options_lookup.py, test_options_quotes.py (all match on unrelated "options"/"dte-as-response-field" content, none on the request parameter).
    Outside my limits and left as-is: CHANGELOG.md (pipeline writes the entry), .github/BUG_FINDING.md, .github/ISSUE_WORKFLOW.md, .github/ISSUE_TEMPLATE/bug.yml — none describe this parameter, so nothing there is left incorrect by this change.

review fix 1: Fixed the major finding: the days_to_expiration field description in src/marketdata/input_types/options.py claimed the comparison-operator form is inclusive, which contradicts the API's own </> semantics and the live test that proves <bound excludes the bound. Reworded it to scope "inclusive" to the closed range only and describe the comparison operator as a one-sided bound, inclusive with >=/<= and exclusive with >/< — matching filters.py's existing strike/delta wording and the already-correct phrasing in docs/options.md, which needed no change. The disagreement to name for the API team: its description reads "(>=30, <45) returns every expiration whose dte falls within the bounds, inclusive", but a live <45 call excludes dte=45; the SDK's docs now state only the operator-symbol semantics both sides agree on, not the blanket "inclusive" claim.
Resolved the first minor finding: deleted the now-redundant pre-existing test_options_chain_input_days_to_expiration_alias_on_wire in src/tests/test_options_chain.py, since its one assertion (dte=30 sent, days_to_expiration absent) is exactly the single_int case of the new parametrized test.
Left the second minor finding (a checked DteFilter builder, parallel to StrikeFilter/DeltaFilter) unresolved, as the reviewer offered no fix and flagged it as a maintainer decision, not a defect in this change.
Re-ran the full suite and lint: 2169 passed (one fewer than before, from the deletion), coverage still 100% (3297/3297), ruff check and format both clean.

changelog: Added changelog entry under ### Added documenting OptionsChainInput.days_to_expiration (alias dte) parameter type widening from int | None to str | int | None to accept comma-separated days, closed ranges, and comparison operators matching the strike and delta syntax (API release 2.0.0), with int forms unchanged.

Files

  • CHANGELOG.md
  • docs/options.md
  • src/marketdata/input_types/options.py
  • src/tests/integration/test_options_live.py
  • src/tests/test_options_chain.py

Version

Public-surface change computed by the pipeline: minor

  • added: marketdata.input_types.options.OptionsChainInput.days_to_expiration — Annotation widened from int | None to str | int | None; OptionsChainInput(symbol=..., dte=30) and client.options.chain("AAPL", days_to_expiration=30) still type-check, and callers gain the new str form (e.g. "15,30,45", "0-45", ">=30").

Live-API suite

  • src/tests/integration/test_options_live.py

Files 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.


4 coder run(s) · 3 review(s) · 108 turns · 9,394,826 tokens · US$ 5.09 · item 1380e6e8-31e3-4322-a204-207422fcb4d5

Agent runs
  • coder · claude-haiku-4-5-20251001, claude-sonnet-5 · 2,474,157 tokens (107,806 in, 2,335,484 cached, 30,867 out) · 35 turns · US$ 1.22 · 6 min 20 s
  • coder · claude-sonnet-5 · 4,036,080 tokens (25,912 in, 3,996,655 cached, 13,513 out) · 31 turns · US$ 1.04 · 4 min 52 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 576,110 tokens (76,378 in, 483,906 cached, 15,826 out) · 11 turns · US$ 1.44 · 3 min 36 s
  • coder · claude-sonnet-5 · 1,832,828 tokens (10,516 in, 1,816,706 cached, 5,606 out) · 13 turns · US$ 0.46 · 2 min 13 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 70,583 tokens (26,947 in, 40,778 cached, 2,858 out) · 4 turns · US$ 0.38 · 39 s
  • security · claude-haiku-4-5-20251001, claude-sonnet-5 · 120,780 tokens (61,010 in, 58,414 cached, 1,356 out) · 3 turns · US$ 0.30 · 18 s
  • analyst · claude-haiku-4-5-20251001, claude-sonnet-5 · 90,588 tokens (24,568 in, 64,788 cached, 1,232 out) · 4 turns · US$ 0.13 · 17 s
  • changelog · claude-haiku-4-5-20251001 · 193,700 tokens (31,861 in, 155,149 cached, 6,690 out) · 7 turns · US$ 0.12 · 1 min 07 s

tests: Added wire tests in test_options_chain.py for the four new `dte` forms the API now accepts (comma-separated list, closed range, `>=` and `<` operators), plus the pre-existing single-value int/str forms as regression, parametrizing `test_options_chain_input_days_to_expiration_forms_on_wire`. Added live integration tests in test_options_live.py (single-value narrowing, comma-list dedup against per-value ground truth, closed-range inclusive endpoints, `>=` and `<` boundary inclusion/exclusion), using module-scoped fixtures at dte 15/30/45 to anchor assertions in real data instead of server defaults. Wrote the compatibility probe calling `OptionsChainInput(symbol=..., dte=<int>)`, the only existing public member this delta touches.

implement: Widened `OptionsChainInput.days_to_expiration` (alias `dte`) from `int | None` to `str | int | None`, since the API's `dte` query parameter now also reads a string expression (comma list, closed range, comparison operator), matching `strike`/`delta` syntax; a bare int is still sent unchanged.
- Docs with example: updated `docs/options.md`'s `days_to_expiration` bullet and added a "Filter by days to expiration" example showing all four forms.
- New member docstrings: none added; only the existing field's `Field(description=...)` was updated to state the new forms.
- Wire test per new form: four phase-1 tests (comma list, closed range, `>=`, `<`) plus the regression single-value int/str case all pass against the new union type.
- Validation of a new type on every construction path, empty/null handling: not applicable, no new type was introduced; the field stays a plain `str | int | None`, pass-through to the API as `strike`/`delta` already do.
- Coverage: confirmed 100% (`--cov=marketdata`), no new branches added.
- Examples/docs correctness: re-checked `README.md` and `examples/`, neither mentions `days_to_expiration`/`dte`, so neither was touched.
- Existing parameter keeps accepting its old type: `int` still type-checks and serializes identically (`dte=30`), confirmed by the full suite; the phase-1 probe (which only used today's `int`) has since been removed from the checkout by the pipeline, as expected.
- No disagreement between live API and documentation to report; I could not run the live suite here, and the new docs/tests only restate the API's own published description of `dte`.
Files named in the brief but left unchanged, with reason: `src/marketdata/output_types/options_chain.py` and `options_quotes.py` (the response's `dte` field is still `list[int]`, unaffected — this delta is request-side only); `src/marketdata/resources/options/chain.py` and `lookup.py` (matched on the word "options", not `dte`); `README.md`, the `stocks_news` fixtures, `test_fan_out_retry.py`, `test_client.py`, `test_response_meta*.py`, `test_status_mapping.py`, `test_money_decimal.py`, `test_options_expirations.py`, `test_options_lookup.py`, `test_options_quotes.py` (all match on unrelated "options"/"dte-as-response-field" content, none on the request parameter).
Outside my limits and left as-is: `CHANGELOG.md` (pipeline writes the entry), `.github/BUG_FINDING.md`, `.github/ISSUE_WORKFLOW.md`, `.github/ISSUE_TEMPLATE/bug.yml` — none describe this parameter, so nothing there is left incorrect by this change.

review fix 1: Fixed the major finding: the `days_to_expiration` field description in src/marketdata/input_types/options.py claimed the comparison-operator form is inclusive, which contradicts the API's own `<`/`>` semantics and the live test that proves `<bound` excludes the bound. Reworded it to scope "inclusive" to the closed range only and describe the comparison operator as a one-sided bound, inclusive with `>=`/`<=` and exclusive with `>`/`<` — matching `filters.py`'s existing strike/delta wording and the already-correct phrasing in `docs/options.md`, which needed no change. The disagreement to name for the API team: its description reads "(>=30, <45) returns every expiration whose dte falls within the bounds, inclusive", but a live `<45` call excludes dte=45; the SDK's docs now state only the operator-symbol semantics both sides agree on, not the blanket "inclusive" claim.
Resolved the first minor finding: deleted the now-redundant pre-existing `test_options_chain_input_days_to_expiration_alias_on_wire` in src/tests/test_options_chain.py, since its one assertion (`dte=30` sent, `days_to_expiration` absent) is exactly the `single_int` case of the new parametrized test.
Left the second minor finding (a checked `DteFilter` builder, parallel to `StrikeFilter`/`DeltaFilter`) unresolved, as the reviewer offered no fix and flagged it as a maintainer decision, not a defect in this change.
Re-ran the full suite and lint: 2169 passed (one fewer than before, from the deletion), coverage still 100% (3297/3297), ruff check and format both clean.

changelog: Added changelog entry under `### Added` documenting `OptionsChainInput.days_to_expiration` (alias `dte`) parameter type widening from `int | None` to `str | int | None` to accept comma-separated days, closed ranges, and comparison operators matching the `strike` and `delta` syntax (API release 2.0.0), with `int` forms unchanged.
@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 29, 2026
@marketdata-sdk-sync

Copy link
Copy Markdown
Author

🧾 Job log — sdk-sync

sdk-auto-sync job log

API release 2.0.0 (commit ffb34b7)
SDK sdk-py
Branch sdk-sync/2.0.0-ffb34b7
API surface ae2b047c8f6f → c2a31e277345
Date 2026-10-29 15:25:36Z
Outcome done

Changes in the API surface

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

1. tests

Coder (35 turns, US$ 1.22, 6 min 20 s):

uv run --frozen pytest -n 4 -p no:cacheprovider --junitxml=build/test-results/pytest.xml -> red as required: 4 failed (comma_list, closed_range, at_least_operator, below_operator), 2166 passed. uv run --frozen --with pyright[nodejs]==1.1.414 pyright build/sdk-sync-compat/probe.py -> 0 errors/warnings/informations.

Added wire tests in test_options_chain.py for the four new dte forms the API now accepts (comma-separated list, closed range, >= and < operators), plus the pre-existing single-value int/str forms as regression, parametrizing test_options_chain_input_days_to_expiration_forms_on_wire. Added live integration tests in test_options_live.py (single-value narrowing, comma-list dedup against per-value ground truth, closed-range inclusive endpoints, >= and < boundary inclusion/exclusion), using module-scoped fixtures at dte 15/30/45 to anchor assertions in real data instead of server defaults. Wrote the compatibility probe calling OptionsChainInput(symbol=..., dte=<int>), the only existing public member this delta touches.

Gates:

  • compatibility probe on the base, attempt 1: passed (2 s)
  • tests (expected to fail), attempt 1: failed — 4 failing test(s): src.tests.test_options_chain.test_options_chain_input_days_to_expiration_forms_on_wire[comma_list], src.tests.test_options_chain.test_options_chain_input_days_to_expiration_forms_on_wire[closed_range], src.tests.test_options_chain.test_options_chain_input_days_to_expiration_forms_on_wire[at_least_operator] and 1 more (27 s)

2. implement

Coder (31 turns, US$ 1.04, 4 min 52 s):

uv run --frozen pytest -n 4 -p no:cacheprovider --junitxml=build/test-results/pytest.xml -> 2170 passed. uv run --frozen python .github/scripts/check_ruff_version.py && uv run --frozen ruff check src/ examples/ .github/scripts/ && uv run --frozen ruff format --check src/ examples/ .github/scripts/ -> all green (ruff 0.16.10, "All checks passed!", 117 files already formatted). Manual coverage check (--cov=marketdata) -> 100%, TOTAL 3297/3297. Probe file was already removed from build/sdk-sync-compat by the pipeline before this phase, as the spec says it would be.

Widened OptionsChainInput.days_to_expiration (alias dte) from int | None to str | int | None, since the API's dte query parameter now also reads a string expression (comma list, closed range, comparison operator), matching strike/delta syntax; a bare int is still sent unchanged.

  • Docs with example: updated docs/options.md's days_to_expiration bullet and added a "Filter by days to expiration" example showing all four forms.
  • New member docstrings: none added; only the existing field's Field(description=...) was updated to state the new forms.
  • Wire test per new form: four phase-1 tests (comma list, closed range, >=, <) plus the regression single-value int/str case all pass against the new union type.
  • Validation of a new type on every construction path, empty/null handling: not applicable, no new type was introduced; the field stays a plain str | int | None, pass-through to the API as strike/delta already do.
  • Coverage: confirmed 100% (--cov=marketdata), no new branches added.
  • Examples/docs correctness: re-checked README.md and examples/, neither mentions days_to_expiration/dte, so neither was touched.
  • Existing parameter keeps accepting its old type: int still type-checks and serializes identically (dte=30), confirmed by the full suite; the phase-1 probe (which only used today's int) has since been removed from the checkout by the pipeline, as expected.
  • No disagreement between live API and documentation to report; I could not run the live suite here, and the new docs/tests only restate the API's own published description of dte.
    Files named in the brief but left unchanged, with reason: src/marketdata/output_types/options_chain.py and options_quotes.py (the response's dte field is still list[int], unaffected — this delta is request-side only); src/marketdata/resources/options/chain.py and lookup.py (matched on the word "options", not dte); README.md, the stocks_news fixtures, test_fan_out_retry.py, test_client.py, test_response_meta*.py, test_status_mapping.py, test_money_decimal.py, test_options_expirations.py, test_options_lookup.py, test_options_quotes.py (all match on unrelated "options"/"dte-as-response-field" content, none on the request parameter).
    Outside my limits and left as-is: CHANGELOG.md (pipeline writes the entry), .github/BUG_FINDING.md, .github/ISSUE_WORKFLOW.md, .github/ISSUE_TEMPLATE/bug.yml — none describe this parameter, so nothing there is left incorrect by this change.

Gates:

  • tests, attempt 1: passed (28 s)
  • build, attempt 1: passed (0 s)
  • compatibility probe, attempt 1: passed (2 s)
  • live API suite, attempt 1: passed (10 s) — uv run --frozen pytest -m integration -p no:cacheprovider --junitxml=build/test-results/live.xml src/tests/integration/test_options_live.py

3. review 1

Reviewer (11 turns, US$ 1.44, 3 min 36 s): 1 blocking finding(s)

The widening of days_to_expiration to str | int is additive and correct, and every form the API enumerates (single value as int and as str, comma list, closed range, >=, <) has both a wire test and a live test that derives its expectation from calls made with the parameter itself. One documentation defect: the field description asserts the comparison-operator form is "inclusive", which the change's own live test contradicts for <45. The rest is housekeeping.

  • [major] src/marketdata/input_types/options.py:46 — The field description says "a closed range such as '0-45' or a comparison operator such as '>=30' or '<45' returns every expiration whose dte falls within the bounds, inclusive", asserting inclusivity for <45. The change's own live test test_dte_below_operator_excludes_the_bound proves the server excludes that bound, and filters.py documents the same grammar's < as "strictly below" — so this text states, as settled, a point the live run contradicts. Scope "inclusive" to the closed range and call the operator form a one-sided bound, as docs/options.md already does, and name the disagreement with the API's wording for a person to settle.
  • [minor] src/tests/test_options_chain.py:386 — test_options_chain_input_days_to_expiration_alias_on_wire is now fully subsumed by the new parametrized test's single_int case, which asserts the same dte=30 and absent days_to_expiration. Delete the older test to keep one wire assertion per behaviour.
  • [minor] src/marketdata/input_types/options.py:38 — The API says dte's syntax matches strike and delta, for which this repository exposes checked builders (StrikeFilter, DeltaFilter, both re-exported from marketdata/__init__.py), while dte callers must hand-write the expression. Whether a sibling DteFilter is wanted for consistency is a question for a maintainer; I offer no fix.

4. review fix 1

Findings sent back to the coder:

  • [major] src/marketdata/input_types/options.py:46 — The field description says "a closed range such as '0-45' or a comparison operator such as '>=30' or '<45' returns every expiration whose dte falls within the bounds, inclusive", asserting inclusivity for <45. The change's own live test test_dte_below_operator_excludes_the_bound proves the server excludes that bound, and filters.py documents the same grammar's < as "strictly below" — so this text states, as settled, a point the live run contradicts. Scope "inclusive" to the closed range and call the operator form a one-sided bound, as docs/options.md already does, and name the disagreement with the API's wording for a person to settle.

Minor findings sent along, as optional:

  • [minor] src/tests/test_options_chain.py:386 — test_options_chain_input_days_to_expiration_alias_on_wire is now fully subsumed by the new parametrized test's single_int case, which asserts the same dte=30 and absent days_to_expiration. Delete the older test to keep one wire assertion per behaviour.
  • [minor] src/marketdata/input_types/options.py:38 — The API says dte's syntax matches strike and delta, for which this repository exposes checked builders (StrikeFilter, DeltaFilter, both re-exported from marketdata/__init__.py), while dte callers must hand-write the expression. Whether a sibling DteFilter is wanted for consistency is a question for a maintainer; I offer no fix.

Coder (13 turns, US$ 0.46, 2 min 13 s):

uv run --frozen pytest -n 4 -p no:cacheprovider --junitxml=build/test-results/pytest.xml -> 2169 passed. uv run --frozen python .github/scripts/check_ruff_version.py && uv run --frozen ruff check src/ examples/ .github/scripts/ && uv run --frozen ruff format --check src/ examples/ .github/scripts/ -> green (ruff 0.16.10, all checks passed, 117 files already formatted). Manual --cov=marketdata run -> 100% (3297/3297), to confirm the deletion didn't drop coverage.

Fixed the major finding: the days_to_expiration field description in src/marketdata/input_types/options.py claimed the comparison-operator form is inclusive, which contradicts the API's own </> semantics and the live test that proves <bound excludes the bound. Reworded it to scope "inclusive" to the closed range only and describe the comparison operator as a one-sided bound, inclusive with >=/<= and exclusive with >/< — matching filters.py's existing strike/delta wording and the already-correct phrasing in docs/options.md, which needed no change. The disagreement to name for the API team: its description reads "(>=30, <45) returns every expiration whose dte falls within the bounds, inclusive", but a live <45 call excludes dte=45; the SDK's docs now state only the operator-symbol semantics both sides agree on, not the blanket "inclusive" claim.
Resolved the first minor finding: deleted the now-redundant pre-existing test_options_chain_input_days_to_expiration_alias_on_wire in src/tests/test_options_chain.py, since its one assertion (dte=30 sent, days_to_expiration absent) is exactly the single_int case of the new parametrized test.
Left the second minor finding (a checked DteFilter builder, parallel to StrikeFilter/DeltaFilter) unresolved, as the reviewer offered no fix and flagged it as a maintainer decision, not a defect in this change.
Re-ran the full suite and lint: 2169 passed (one fewer than before, from the deletion), coverage still 100% (3297/3297), ruff check and format both clean.

Gates:

  • tests, attempt 1: passed (27 s)
  • build, attempt 1: passed (1 s)
  • compatibility probe, attempt 1: passed (1 s)
  • live API suite, attempt 1: passed (12 s) — uv run --frozen pytest -m integration -p no:cacheprovider --junitxml=build/test-results/live.xml src/tests/integration/test_options_live.py

5. review 2

Reviewer (4 turns, US$ 0.38, 39 s): approved

The blocking finding is resolved: the dte description no longer asserts inclusivity for <45, and the inclusive/exclusive wording it now carries follows this repository's own documentation of the same grammar in filters.py (below = "strictly below"), which the API's own "syntax matches strike and delta" licenses, and which agrees with the live test. The duplicate wire test was deleted without losing any assertion — the parametrized single_int case covers the same int→dte=30 path. Nothing in what the fix touched is newly wrong.

  • no findings

6. security

Security (3 turns, US$ 0.30, 18 s): approved

The change widens days_to_expiration/dte from int to str|int, passing the string through unvalidated to the dte query parameter. This value reaches httpx's standard query-param encoding with no file, shell, or deserialization operations involved, so there is no injection, credential-exposure, or unsafe-default risk introduced.

  • no findings

7. assess

Analyst (4 turns, US$ 0.13, 17 s) — public surface:

The only public-surface change is OptionsChainInput.days_to_expiration (wire alias dte), whose annotation widened from int | None to str | int | None to let callers pass the API's new string expression syntax (comma list, range, comparison operator) alongside the existing bare integer. Since client.options.chain() forwards **kwargs into this input model, the model field is the typed contract consumers rely on, and every call written against today's int | None type still type-checks.

  • added: marketdata.input_types.options.OptionsChainInput.days_to_expiration — Annotation widened from int | None to str | int | None; OptionsChainInput(symbol=..., dte=30) and client.options.chain("AAPL", days_to_expiration=30) still type-check, and callers gain the new str form (e.g. "15,30,45", "0-45", ">=30").

Computed by the pipeline: minor; changelog entry written

8. changelog

Coder (7 turns, US$ 0.12, 1 min 07 s):

File edited: CHANGELOG.md added one line under ### Added. No build/test commands run; changelog entry only.

Added changelog entry under ### Added documenting OptionsChainInput.days_to_expiration (alias dte) parameter type widening from int | None to str | int | None to accept comma-separated days, closed ranges, and comparison operators matching the strike and delta syntax (API release 2.0.0), with int forms unchanged.

Gates:

  • build, attempt 1: passed (0 s)

Totals

  • Bump: minor
  • Coder runs: 4
  • Review runs: 3
  • Gates run: 11 (1 failed)
  • Files changed by the agent: 5
  • Turns: 108
  • Tokens: 9,394,826
  • Estimated cost: US$ 5.09
  • Time: 21 min 44 s (agents 19 min 22 s, gates 1 min 50 s)

Agent runs

  • coder · claude-haiku-4-5-20251001, claude-sonnet-5 · 2,474,157 tokens (107,806 in, 2,335,484 cached, 30,867 out) · 35 turns · US$ 1.22 · 6 min 20 s
  • coder · claude-sonnet-5 · 4,036,080 tokens (25,912 in, 3,996,655 cached, 13,513 out) · 31 turns · US$ 1.04 · 4 min 52 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 576,110 tokens (76,378 in, 483,906 cached, 15,826 out) · 11 turns · US$ 1.44 · 3 min 36 s
  • coder · claude-sonnet-5 · 1,832,828 tokens (10,516 in, 1,816,706 cached, 5,606 out) · 13 turns · US$ 0.46 · 2 min 13 s
  • reviewer · claude-haiku-4-5-20251001, claude-opus-5 · 70,583 tokens (26,947 in, 40,778 cached, 2,858 out) · 4 turns · US$ 0.38 · 39 s
  • security · claude-haiku-4-5-20251001, claude-sonnet-5 · 120,780 tokens (61,010 in, 58,414 cached, 1,356 out) · 3 turns · US$ 0.30 · 18 s
  • analyst · claude-haiku-4-5-20251001, claude-sonnet-5 · 90,588 tokens (24,568 in, 64,788 cached, 1,232 out) · 4 turns · US$ 0.13 · 17 s
  • changelog · claude-haiku-4-5-20251001 · 193,700 tokens (31,861 in, 155,149 cached, 6,690 out) · 7 turns · US$ 0.12 · 1 min 07 s

@codecov

codecov Bot commented Oct 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (6a54e86) to head (d0f4441).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #175   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           62        62           
  Lines         3297      3297           
=========================================
  Hits          3297      3297           
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

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

@marketdata-code-review

Copy link
Copy Markdown

✅ Ready — Code review

Version impact: minor. Public surface comparison: OptionsChainInput.days_to_expiration widens from int | None to str | int | None, which is additive and non-breaking; the documentation, changelog, wire tests, and live tests cover the new expression forms.

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


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

@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 29, 2026
@MarketDataDev03

Copy link
Copy Markdown
Collaborator

Closing to re-run the SDK sync for API 2.0.0 together with sdk-java.

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