- pyproject.toml: ruff target-version py311 → py313 (auto-fix 42 lint
warnings via UP rules); aggiunto consider_namespace_packages = true
che risolve la collisione conftest tra servizi e permette di lanciare
pytest sull'intera suite cross-servizio.
- mcp_common.audit: nuovo helper audit_write_op() con logger dedicato
mcp.audit. Wirato su tutti i write endpoint di deribit, bybit, alpaca
e hyperliquid (place_order, place_combo_order, cancel_*, set_*,
close_*, transfer_*, switch_*, amend_*) con principal + target +
payload non-sensibile + result summarizzato.
- mcp_common.app_factory: ExchangeAppSpec + run_exchange_main()
centralizza il boilerplate dei __main__.py (configure_root_logging,
fail_fast_if_missing, summarize, load creds, resolve_environment,
load token store, uvicorn). I 4 __main__.py exchange ridotti da ~60
LOC ognuno a ~25 LOC dichiarativi. mcp_common.env_validation
promosso da mcp_deribit (mantenuto re-export shim per back-compat
test_env_validation).
- 8 test nuovi (4 audit + 4 app_factory). Suite full: 450/450 verdi.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deribit: private/create_combo + place_order sul combo instrument → una
sola crociata di spread invece di N (slippage atteso ridotto su
strutture liquide). ACL core + leverage cap su tutti i leg.
Bybit: place_batch_order su category=option (atomic multi-leg, 1
round-trip API). Reject su category != option (perp/linear non
supportano batch nativo). orderLinkId auto-generato per leg.
Tutti i test: deribit 48/48, bybit 123/123.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>