From 4485d3b394d32508d29a64b6e98783d46b83441a Mon Sep 17 00:00:00 2001 From: Junyou Park Date: Mon, 10 Aug 2026 05:55:48 +0900 Subject: [PATCH] fix: allow official backtests without feature pins --- .../v1/official-backtest-request.schema.json | 1 - tests/test_contracts.py | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backtest_engine/schemas/strategy-bot/v1/official-backtest-request.schema.json b/src/backtest_engine/schemas/strategy-bot/v1/official-backtest-request.schema.json index a5b3e33..9b37edc 100644 --- a/src/backtest_engine/schemas/strategy-bot/v1/official-backtest-request.schema.json +++ b/src/backtest_engine/schemas/strategy-bot/v1/official-backtest-request.schema.json @@ -59,7 +59,6 @@ "requestReason": {"const": "STRATEGY_RELEASE"}, "featureMaterializations": { "type": "array", - "minItems": 1, "items": { "type": "object", "required": ["featureMaterializationId", "lockedResultHash"], diff --git a/tests/test_contracts.py b/tests/test_contracts.py index 0eb78a6..1d3ceb6 100644 --- a/tests/test_contracts.py +++ b/tests/test_contracts.py @@ -271,6 +271,16 @@ def test_consumer_accepts_bs_official_backtest_request_verbatim( assert accepted["datasetManifestId"] == B_DATASET_MANIFEST_ID +def test_official_request_accepts_no_feature_materializations( + official_request: dict[str, Any], +) -> None: + official_request["featureMaterializations"] = [] + + accepted = validate_official_backtest_request(official_request) + + assert accepted["featureMaterializations"] == [] + + def test_official_request_identity_covers_every_server_selected_dataset( official_request: dict[str, Any], ) -> None: