wbt 0.7.0

Weight-based backtesting engine for quantitative trading
# 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.