let d = import "defaults/gate.ncl" in { membranes = [ d.make_membrane { id = "budget-enforcement-gate", name = "Budget Enforcement Gate", description = "Controls whether an LLM request is allowed to proceed. Enforced by BudgetEnforcer middleware in every LLM call path.", permeability = 'Medium, accepts = ['EcosystemRelevance], protects = ["per-role monthly budget limits", "fallback chain integrity"], opening_condition = { max_tension_dimensions = 1, pending_transitions = 0, core_stable = true, description = "Request is allowed when current role spend is below the near-threshold limit.", }, closing_condition = "Role budget reaches near-threshold (80%) — gate moves to degraded mode, requests route to cheaper provider. At exceeded (100%), gate closes and requests are rejected.", max_duration = 'Indefinite, protocol = 'Absorb, active = true, }, d.make_membrane { id = "agent-capability-gate", name = "Agent Capability Gate", description = "Controls whether a task signal type is accepted by the agent dispatcher. Checked before dispatch in create_agent_task reflection mode.", permeability = 'Medium, accepts = ['EcosystemRelevance, 'DepthDemonstrated], protects = ["agent workload boundaries", "capability contract per role"], opening_condition = { max_tension_dimensions = 2, pending_transitions = 1, core_stable = true, description = "Signal type is in the agent's declared capability set and the agent is not at max load.", }, closing_condition = "Agent load exceeds threshold or signal type not in capability set.", max_duration = 'Indefinite, protocol = 'Challenge, active = true, }, d.make_membrane { id = "external-release-gate", name = "External Release Gate", description = "Controls when vapora is ready for external consumers beyond the current ecosystem. Not active until ecosystem-level stability is reached.", permeability = 'Low, accepts = ['EcosystemRelevance, 'OpportunityAlignment, 'DepthDemonstrated], protects = ["API stability contract", "A2A protocol versioning"], opening_condition = { max_tension_dimensions = 2, pending_transitions = 2, core_stable = true, description = "All integration tests passing in CI with live services; at least 2 external consumers onboarded; A2A protocol versioned.", }, closing_condition = "Axiom-level breaking change introduced without ADR; integration tests regress.", max_duration = 'Indefinite, protocol = 'Observe, active = false, }, ], }