commit 64911e6aee9c8451eb8df843f0a13cb8a9950997
parent 1f3dac0bc20f065317fe5a49c9e2b237cd33c3c8
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:41:45 +0000
core: separate capability support and permission
Diffstat:
2 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/src/hyf_core/capabilities/registry.mojo b/src/hyf_core/capabilities/registry.mojo
@@ -192,3 +192,39 @@ def execute_registered_business_capability(
)
return failed_capability(capability_not_implemented_error(capability_id))
+
+
+@fieldwise_init
+struct CapabilityExposure(Copyable, Movable):
+ var capability_id: String
+ var implementation_supported: Bool
+ var provider_configured: Bool
+ var assistance_permitted: Bool
+ var provider_ready: Bool
+ var exposed: Bool
+
+
+def capability_assisted_supported(capability_id: String) -> Bool:
+ return capability_id == "query_rewrite"
+
+
+def capability_exposure(
+ capability_id: String,
+ provider_configured: Bool,
+ assistance_permitted: Bool,
+ provider_ready: Bool,
+) -> CapabilityExposure:
+ var supported = capability_assisted_supported(capability_id)
+ return CapabilityExposure(
+ capability_id=String(capability_id),
+ implementation_supported=supported,
+ provider_configured=provider_configured,
+ assistance_permitted=assistance_permitted,
+ provider_ready=provider_ready,
+ exposed=(
+ supported
+ and provider_configured
+ and assistance_permitted
+ and provider_ready
+ ),
+ )
diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo
@@ -1331,3 +1331,22 @@ def test_projection_assertions_enforce_exactness_and_reject_unknown_operators()
def main() raises:
TestSuite.discover_tests[__functions_in_module()]().run()
+
+
+from hyf_core.capabilities.registry import (
+ capability_assisted_supported,
+ capability_exposure,
+)
+
+
+def test_capability_exposure_separates_support_permission_readiness() raises:
+ assert_true(capability_assisted_supported("query_rewrite"))
+ assert_true(not capability_assisted_supported("semantic_rank"))
+ var supported_but_blocked = capability_exposure("query_rewrite", False, True, False)
+ assert_true(supported_but_blocked.implementation_supported)
+ assert_true(not supported_but_blocked.provider_configured)
+ assert_true(not supported_but_blocked.exposed)
+ var fully_ready = capability_exposure("query_rewrite", True, True, True)
+ assert_true(fully_ready.exposed)
+ var permission_denied = capability_exposure("query_rewrite", True, False, True)
+ assert_true(not permission_denied.exposed)