# wbt v0.7.0
> Release date: 2026-07-29
> Crate tag: `crate-v0.7.0` · Python tag: `v0.7.0`
## Summary
MINOR release. It adds versioned JSON serialization for complete
`BacktestResult` payloads, matching the MessagePack wire envelope, and adds
volatility-normalized long/short excess curves for report consumers.
## Added
- `BacktestResult.to_json()` / `BacktestResult.dump_json()` and the matching
top-level `wbt.to_json()`, `wbt.dump_json()`, and `wbt.load_json()` APIs.
JSON and MessagePack now share the same `format` / `format_version` /
`payload` envelope. Non-finite floats are normalized to `null`; loaders
reject invalid envelope metadata and values outside the JSON domain.
- `wbt.assert_payload_equal()` checks nested payload values and Python types,
so applications can verify JSON and MessagePack round trips agree exactly.
- `BacktestResult.curves_voladj` now includes `多头超额` and `空头超额`, derived
from normalized curves as `norm(多头) - norm(基准)` and
`norm(空头) + norm(基准)` respectively.
## Compatibility
`curves_voladj` no longer exposes the ambiguous `超额` alias. Consumers of that
volatility-normalized key must select `多头超额` or `空头超额` explicitly. Raw
`curves["超额"]` is unchanged. This is a breaking output-key change and is why
the 0.x version advances by MINOR.
## Tests
- JSON and MessagePack round-trip tests cover nested values, Unicode, empty
containers, finite numeric types, and non-finite float normalization.
- Volatility-normalized curve tests cover target volatility and both long/short
excess formulas.
## §4 LLM full-repo review
- Scope: full diff `v0.6.0..HEAD` (serialization, result model, plotting,
report integration, documentation, and tests), plus cold reads of
`src/core/backtest_result_wire.rs`, `src/core/daily_performance.rs`, and
`python/wbt/backtest.py`.
- Conclusion: no release-blocking finding. Reviewed empty inputs, non-finite
values, strict bool/integer distinctions, JSON object-key constraints,
version validation, curve derivation signs, and Python/Rust wire compatibility.
- Known issues: none.