release: v0.10.0

This commit is contained in:
github-actions[bot]
2026-07-09 11:01:08 +00:00
parent a13b3f5104
commit 220fc1d434
8 changed files with 137 additions and 221 deletions
+13
View File
@@ -14,8 +14,21 @@ without needing a Pro license or real market data.
import json
import sqlite3
import pytest
import manifoldbt as bt
from manifoldbt.diagnostics import _prepare_for_diagnostics
from manifoldbt.exceptions import LicenseError
def test_detect_lookahead_gated_on_community(monkeypatch):
"""Look-ahead detection is Pro: Community gets a clean LicenseError before any
work (the analysis itself is enforced natively; this is the friendly UX gate).
"""
monkeypatch.setattr(bt, "_is_pro", lambda: False)
with pytest.raises(LicenseError):
# Raises before touching strategy/config/store, so None args are fine.
bt.diagnostics.detect_lookahead(None, None, None)
def _make_metadata_db(path):
+11
View File
@@ -6,9 +6,20 @@ to the Rust-only golden test fixtures.
import json
import os
import pytest
import manifoldbt as bt
from manifoldbt import run_with_parquet
# The golden fixtures were generated at full (Pro) resolution; the Community
# resolution cap changes the equity-point count and the comparison is
# meaningless. CI unlocks via BT_UNLOCKED=1 (debug builds); locally this needs
# an activated Pro license.
pytestmark = pytest.mark.skipif(
bt.license_info()[0] != "Pro",
reason="requires Pro (fixtures generated at sub-daily resolution); activate a license or use a BT_UNLOCKED dev build",
)
def test_golden_buy_and_hold_matches_fixtures(golden_buy_hold_dir):
"""Mirror of Rust golden_buy_and_hold_equity_trade_metrics_and_manifest_match_fixture."""
+11
View File
@@ -3,9 +3,20 @@ import json
import os
import time
import pytest
import manifoldbt as bt
from manifoldbt import run_sweep, run_with_parquet
# The golden fixtures are 1-minute bars; on a Community license the engine caps
# resolution to daily, so these runs produce zero trades and the assertions are
# meaningless. CI unlocks via BT_UNLOCKED=1 (debug builds); locally this needs
# an activated Pro license.
pytestmark = pytest.mark.skipif(
bt.license_info()[0] != "Pro",
reason="requires Pro (sub-daily resolution); activate a license or use a BT_UNLOCKED dev build",
)
def test_sweep_returns_one_result_per_combo(golden_buy_hold_dir):
"""Sweep with 2x2 grid returns 4 results."""