
    def test_longer_dated_contract_request_is_out_of_scope():
        """STILL REFUSED beyond 1DTE. The expiry guard was WIDENED to 0DTE-or-1DTE (operator 2026-08-04)
        but NOT removed: it is what stops an order path reaching for a far-dated contract whose risk
        profile has nothing to do with the intraday sleeve. NOW is Fri 2026-07-31, so 1DTE is Mon
        2026-08-03 and the requested 2026-08-07 is several trading days out."""
        with pytest.raises(ValueError, match="only 0DTE .* or 1DTE"):
>           OE.select_contract(
                FakeBroker(), "call", date(2026, 8, 7), now=NOW, underlying="IWM"
            )

tests/services/test_options_execution.py:129: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

broker = <test_options_execution.FakeBroker object at 0x122800b90>
right = 'call', expiry = datetime.date(2026, 8, 7)

    def select_contract(
        broker: Any,
        right: str,
        expiry: _date,
        *,
        now: datetime,
        underlying: str = UNDERLYING_IWM,
        strike_band_pct: float = 3.0,
        max_strike_distance_usd: float = MAX_STRIKE_DISTANCE_USD,
        max_strike_distance_pct: float = MAX_STRIKE_DISTANCE_PCT,
        max_dte: int = 1,
    ) -> Optional[Dict[str, Any]]:
        """Select nearest ATM from the full broker chain, hard-filtered to 0DTE or 1DTE expiry.
    
        EXPIRY IS BOUNDED TO TODAY OR THE NEXT TRADING DAY (operator 2026-08-04: "have it support 1DTE
        as well as 0DTE"). This previously refused anything but same-day. That guard was not incidental
        — it is what stops an order path reaching for a far-dated contract whose risk profile has
        nothing to do with the intraday sleeve — so it is WIDENED BY EXACTLY ONE TRADING DAY rather
        than removed. Anything beyond 1DTE still raises.
    
        The 1DTE date comes from ``scheduler.get_next_trading_date``, which is NYSE-HOLIDAY AWARE.
        ``get_next_businessday_from_day`` would be wrong here: it only skips weekends, so on the day
        before a market holiday it would name a date on which no expiry exists, and the chain lookup
        would come back empty for a reason nobody could see from the error.
        """
        if right not in VALID_RIGHTS:
            raise ValueError(f"right must be call|put, got {right!r}")
        if now.tzinfo is None:
            raise ValueError("contract selection requires a timezone-aware now")
        current_day = now.astimezone(ET).date()
        # THE CEILING IS A PARAMETER, AND ITS DEFAULT IS THE OLD BEHAVIOUR EXACTLY (max_dte=1). The guard
        # is not incidental — it stops an order path reaching for a far-dated contract whose risk profile
        # has nothing to do with the intraday sleeve — so the 0DTE mirror, which passes nothing, keeps the
        # identical 0/1DTE bound it has always had. Only a caller that explicitly asks for more gets more:
        # the operator's manual N-DTE entry (2026-08-05: "0DTE, 1DTE, 2DTE, 3DTE") passes max_dte=3 and
        # reuses THIS selector rather than growing a second strike-picking path ("use the same logic to
        # pick option contract target strike price as current 0DTE mirror feature").
        if int(max_dte) < 0:
            raise ValueError(f"max_dte must be >= 0, got {max_dte}")
        allowed = [current_day] + [
            scheduler.get_next_trading_date(date=current_day, offset=i)
            for i in range(1, int(max_dte) + 1)
        ]
        if expiry not in allowed:
>           raise ValueError(
                f"expiry must be within {max_dte}DTE (holiday-aware trading days): "
                f"expiry={expiry} allowed={[str(d) for d in allowed]}"
            )
E           ValueError: expiry must be within 1DTE (holiday-aware trading days): expiry=2026-08-07 allowed=['2026-07-31', '2026-08-03']

rtrader/services/options_execution.py:451: ValueError

During handling of the above exception, another exception occurred:

    def test_longer_dated_contract_request_is_out_of_scope():
        """STILL REFUSED beyond 1DTE. The expiry guard was WIDENED to 0DTE-or-1DTE (operator 2026-08-04)
        but NOT removed: it is what stops an order path reaching for a far-dated contract whose risk
        profile has nothing to do with the intraday sleeve. NOW is Fri 2026-07-31, so 1DTE is Mon
        2026-08-03 and the requested 2026-08-07 is several trading days out."""
>       with pytest.raises(ValueError, match="only 0DTE .* or 1DTE"):
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AssertionError: Regex pattern did not match.
E         Expected regex: 'only 0DTE .* or 1DTE'
E         Actual message: "expiry must be within 1DTE (holiday-aware trading days): expiry=2026-08-07 allowed=['2026-07-31', '2026-08-03']"

tests/services/test_options_execution.py:128: AssertionError
