diff --git a/core/config.py b/core/config.py index 17190a87..7d1ff3ba 100644 --- a/core/config.py +++ b/core/config.py @@ -335,6 +335,15 @@ class RuntimeConfig: # default); the engine never raises its own ceiling. estimation_enabled: bool = False + # ASK serving gate enable flag. When True, ASK serving is allowed. + # Default False (dark). + ask_serving_enabled: bool = False + + # VERIFIED serving gate enable flag. When True, VERIFIED serving is allowed. + # Default False (dark). + verified_serving_enabled: bool = False + + DEFAULT_IDENTITY_PACK: str = "default_general_v1" DEFAULT_ETHICS_PACK: str = "default_general_ethics_v1" diff --git a/tests/test_ask_serving_gate.py b/tests/test_ask_serving_gate.py index 5b7f76f5..99fc2bf1 100644 --- a/tests/test_ask_serving_gate.py +++ b/tests/test_ask_serving_gate.py @@ -26,10 +26,14 @@ class _OptInConfig: def test_default_runtime_config_keeps_ask_serving_dark() -> None: + assert hasattr(RuntimeConfig(), "ask_serving_enabled") + assert RuntimeConfig().ask_serving_enabled is False + assert DEFAULT_CONFIG.ask_serving_enabled is False assert ask_serving_enabled(DEFAULT_CONFIG) is False assert ask_serving_enabled(RuntimeConfig()) is False + def test_missing_flag_is_dark_for_legacy_config_shape() -> None: assert ask_serving_enabled(_LegacyConfig()) is False diff --git a/tests/test_cross_serving_gates.py b/tests/test_cross_serving_gates.py new file mode 100644 index 00000000..5a3d242a --- /dev/null +++ b/tests/test_cross_serving_gates.py @@ -0,0 +1,31 @@ +"""Cross-gate configuration field tests. + +Verifies that RuntimeConfig has both ask_serving_enabled and +verified_serving_enabled, that both are default false, and that setting +one does not implicitly enable the other. +""" + +from __future__ import annotations + +import dataclasses + +from core.config import RuntimeConfig + + +def test_cross_serving_gates_independence() -> None: + # 1. Verify both are present on a fresh config and default to False + config = RuntimeConfig() + assert hasattr(config, "ask_serving_enabled") + assert hasattr(config, "verified_serving_enabled") + assert config.ask_serving_enabled is False + assert config.verified_serving_enabled is False + + # 2. Verify setting ask_serving_enabled to True does not enable verified_serving_enabled + config_ask = dataclasses.replace(config, ask_serving_enabled=True) + assert config_ask.ask_serving_enabled is True + assert config_ask.verified_serving_enabled is False + + # 3. Verify setting verified_serving_enabled to True does not enable ask_serving_enabled + config_verified = dataclasses.replace(config, verified_serving_enabled=True) + assert config_verified.ask_serving_enabled is False + assert config_verified.verified_serving_enabled is True diff --git a/tests/test_verified_serving_gate.py b/tests/test_verified_serving_gate.py index 4535c778..b9b39800 100644 --- a/tests/test_verified_serving_gate.py +++ b/tests/test_verified_serving_gate.py @@ -30,10 +30,14 @@ class _OptInConfig: def test_default_runtime_config_keeps_verified_serving_dark() -> None: + assert hasattr(RuntimeConfig(), "verified_serving_enabled") + assert RuntimeConfig().verified_serving_enabled is False + assert DEFAULT_CONFIG.verified_serving_enabled is False assert verified_serving_enabled(DEFAULT_CONFIG) is False assert verified_serving_enabled(RuntimeConfig()) is False + def test_missing_flag_is_dark_for_legacy_config_shape() -> None: assert verified_serving_enabled(_LegacyConfig()) is False