"""Method graph profiles — AP1.4e.""" from __future__ import annotations from dataclasses import dataclass DEFAULT_METHOD_KEY = "generic_operating" @dataclass(frozen=True) class GraphMethodProfile: """Steuert Graph-Read-Models pro steering_context.method_key.""" enforce_gate_blocking: bool emphasize_fulfillment: bool _STRICT = GraphMethodProfile(enforce_gate_blocking=True, emphasize_fulfillment=False) _FULFILLMENT = GraphMethodProfile(enforce_gate_blocking=False, emphasize_fulfillment=True) _LIGHT = GraphMethodProfile(enforce_gate_blocking=False, emphasize_fulfillment=False) METHOD_GRAPH_PROFILES: dict[str, GraphMethodProfile] = { "generic_operating": _LIGHT, "queue_pull": _LIGHT, "dispute_procedure": _LIGHT, "continuous_product": _FULFILLMENT, "maturity_progression": _FULFILLMENT, "chapter_based_progression": _FULFILLMENT, "product_milestone_driven": _STRICT, "program_delivery": _STRICT, "sequential_dependency": _STRICT, "agile_iteration": _STRICT, "recurring_control": _FULFILLMENT, } def get_graph_profile(method_key: str | None) -> GraphMethodProfile: if not method_key: return METHOD_GRAPH_PROFILES[DEFAULT_METHOD_KEY] return METHOD_GRAPH_PROFILES.get(method_key, _STRICT) def enforce_gate_blocking_for_method(method_key: str | None) -> bool: return get_graph_profile(method_key).enforce_gate_blocking def graph_profile_as_dict(profile: GraphMethodProfile) -> dict[str, bool]: return { "enforce_gate_blocking": profile.enforce_gate_blocking, "emphasize_fulfillment": profile.emphasize_fulfillment, }