You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(decode): silence find_header warn on optional Greeks columns (#473)
Closes#472.
The v3 server splits the Greeks column set across `option_*_greeks_*_order`
endpoints — `_first_order` ships seven Greeks, `_second_order` ships five,
and `_third_order` ships four — but the shared `GreeksTick` schema in
`tick_schema.toml` carries the full 23-Greek union. Every absent column
on a subset response triggered `tracing::warn!("expected column header
not found in DataTable", header=…)` from `find_header` in
`crates/thetadatadx/src/decode.rs`, so a single
`option_snapshot_greeks_third_order` call printed eight warn lines per
row before any user-visible decoding finished. The reporter on
Issue #472 saw the spam on every Python `option_snapshot_greeks_first_order`
call.
Demote the diagnostic to `tracing::trace!` so it stays reachable via
`RUST_LOG=thetadatadx=trace` for genuine schema-drift investigations
but stops competing with stderr on routine subset calls. Required-column
drift continues to surface as a typed `Error::MissingRequiredHeader`
from the generated parser, so the silenced path is strictly the
documented optional-column case.
Pin the per-endpoint vendor schema in the `GreeksTick` doc-comment
against the upstream OpenAPI capture (`scripts/upstream_openapi.yaml`),
so the column-list / endpoint mapping is visible from the schema file
itself rather than scattered across endpoint metadata.
Add three regression tests in `decode.rs::tests` that drive
`parse_greeks_ticks` against `_first_order`, `_second_order`, and
`_third_order` wire shapes. Each test asserts bit-exact decoded values
for every wire-present column and `0.0` defaults for the documented
gaps. A future regression of `find_header` back to `tracing::warn!`,
or any column-list drift in either direction, surfaces here as a
behavioural test failure rather than as live log spam.
Workspace 8.0.25 → 8.0.26, tdbe 0.12.6 → 0.12.7. CHANGELOG +
docs-site/docs/changelog.md kept byte-identical.
Local CI gate:
cargo fmt --all -- --check # clean
cargo clippy --workspace --all-targets -- -D warnings # clean
cargo test --workspace # 0 failures
cargo deny check # advisories+bans+licenses+sources ok
generate_sdk_surfaces --check # no drift
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments