src/lightspeed@ops@overload_control.erl

-module(lightspeed@ops@overload_control).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/ops/overload_control.gleam").
-export([signal/4, thresholds/6, default_thresholds/0, operator_hook/6, default_hook/0, restrictive_hook/0, new/2, classify/2, recommended_mitigations/3, active_mitigations/1, status_label/1, decision_label/1, mitigation_label/1, audit_metric/1, evaluate/4, run_rollback_drill/4, default_stress_budgets/0, policy_compliant/1, mitigation_reversible/1, active_mitigations_reversible/1, valid/1, audit_entries/1, run_stress_simulation/0, evaluate_stress_budgets/2, budget_failures/1, runtime_thresholds/1, runtime_hook/1, telemetry_metrics/1, signal_label/1, thresholds_label/1, hook_label/1, audit_label/1, signature/1, stress_scenario_label/1, stress_observation_signature/1, budget_result_signature/1, audit_decision/1, audit_mitigation/1, stress_scenario/1]).
-export_type([overload_signal/0, thresholds/0, status/0, mitigation/0, operator_hook/0, decision/0, audit_entry/0, stress_scenario/0, stress_observation/0, stress_budget/0, budget_result/0, runtime/0]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(" Adaptive overload-control and graceful-degradation contracts for M50.\n").

-type overload_signal() :: {overload_signal,
        integer(),
        integer(),
        binary(),
        integer()}.

-type thresholds() :: {thresholds,
        integer(),
        integer(),
        integer(),
        integer(),
        integer(),
        integer()}.

-type status() :: healthy | warning | critical.

-type mitigation() :: {shed_events, integer()} |
    {throttle_cadence, integer()} |
    {enforce_tenant_budget, binary()} |
    enter_read_only_mode.

-type operator_hook() :: {operator_hook,
        binary(),
        boolean(),
        boolean(),
        boolean(),
        boolean(),
        integer()}.

-type decision() :: applied |
    rolled_back |
    {blocked_by_hook, binary()} |
    {noop, binary()}.

-type audit_entry() :: {audit_entry,
        binary(),
        mitigation(),
        decision(),
        binary(),
        integer(),
        status(),
        binary()}.

-type stress_scenario() :: queue_depth_spike |
    cadence_storm |
    tenant_budget_hotspot |
    combined_pressure.

-type stress_observation() :: {stress_observation,
        stress_scenario(),
        integer(),
        integer(),
        integer(),
        integer(),
        integer(),
        boolean()}.

-type stress_budget() :: {stress_budget,
        stress_scenario(),
        integer(),
        integer(),
        integer(),
        integer(),
        boolean()}.

-type budget_result() :: {budget_result, stress_scenario(), boolean(), binary()}.

-opaque runtime() :: {runtime,
        thresholds(),
        operator_hook(),
        list(mitigation()),
        list(audit_entry()),
        list(lightspeed@ops@telemetry:metric())}.

-file("src/lightspeed/ops/overload_control.gleam", 127).
?DOC(" Build one overload signal.\n").
-spec signal(integer(), integer(), binary(), integer()) -> overload_signal().
signal(
    Queue_depth,
    Event_cadence_per_sec,
    Tenant_id,
    Tenant_budget_used_percent
) ->
    {overload_signal,
        Queue_depth,
        Event_cadence_per_sec,
        Tenant_id,
        Tenant_budget_used_percent}.

-file("src/lightspeed/ops/overload_control.gleam", 142).
?DOC(" Build one threshold profile.\n").
-spec thresholds(
    integer(),
    integer(),
    integer(),
    integer(),
    integer(),
    integer()
) -> thresholds().
thresholds(
    Warn_queue_depth,
    Critical_queue_depth,
    Warn_event_cadence_per_sec,
    Critical_event_cadence_per_sec,
    Warn_tenant_budget_percent,
    Critical_tenant_budget_percent
) ->
    {thresholds,
        Warn_queue_depth,
        Critical_queue_depth,
        Warn_event_cadence_per_sec,
        Critical_event_cadence_per_sec,
        Warn_tenant_budget_percent,
        Critical_tenant_budget_percent}.

-file("src/lightspeed/ops/overload_control.gleam", 161).
?DOC(" Default M50 threshold profile.\n").
-spec default_thresholds() -> thresholds().
default_thresholds() ->
    {thresholds, 120, 220, 220, 340, 80, 95}.

-file("src/lightspeed/ops/overload_control.gleam", 173).
?DOC(" Build one operator-policy hook profile.\n").
-spec operator_hook(
    binary(),
    boolean(),
    boolean(),
    boolean(),
    boolean(),
    integer()
) -> operator_hook().
operator_hook(
    Name,
    Allow_shed_events,
    Allow_cadence_throttle,
    Allow_tenant_budget_enforcement,
    Allow_read_only_mode,
    Rollback_window_ms
) ->
    {operator_hook,
        Name,
        Allow_shed_events,
        Allow_cadence_throttle,
        Allow_tenant_budget_enforcement,
        Allow_read_only_mode,
        Rollback_window_ms}.

-file("src/lightspeed/ops/overload_control.gleam", 192).
?DOC(" Default permissive operator-policy hook.\n").
-spec default_hook() -> operator_hook().
default_hook() ->
    {operator_hook, <<"default_autopilot"/utf8>>, true, true, true, true, 300}.

-file("src/lightspeed/ops/overload_control.gleam", 204).
?DOC(" Restrictive hook used for policy-boundary validation.\n").
-spec restrictive_hook() -> operator_hook().
restrictive_hook() ->
    {operator_hook, <<"restrictive_hook"/utf8>>, true, true, true, false, 300}.

-file("src/lightspeed/ops/overload_control.gleam", 216).
?DOC(" Build one overload runtime.\n").
-spec new(thresholds(), operator_hook()) -> runtime().
new(Thresholds, Hook) ->
    {runtime, Thresholds, Hook, [], [], []}.

-file("src/lightspeed/ops/overload_control.gleam", 227).
?DOC(" Classify one overload signal.\n").
-spec classify(overload_signal(), thresholds()) -> status().
classify(Signal, Thresholds) ->
    case ((erlang:element(2, Signal) >= erlang:element(3, Thresholds)) orelse (erlang:element(
        3,
        Signal
    )
    >= erlang:element(5, Thresholds)))
    orelse (erlang:element(5, Signal) >= erlang:element(7, Thresholds)) of
        true ->
            critical;

        false ->
            case ((erlang:element(2, Signal) >= erlang:element(2, Thresholds))
            orelse (erlang:element(3, Signal) >= erlang:element(4, Thresholds)))
            orelse (erlang:element(5, Signal) >= erlang:element(6, Thresholds)) of
                true ->
                    warning;

                false ->
                    healthy
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 627).
-spec tenant_mitigation(binary()) -> list(mitigation()).
tenant_mitigation(Tenant_id) ->
    case Tenant_id =:= <<""/utf8>> of
        true ->
            [];

        false ->
            [{enforce_tenant_budget, Tenant_id}]
    end.

-file("src/lightspeed/ops/overload_control.gleam", 1116).
-spec append(list(mitigation()), list(mitigation())) -> list(mitigation()).
append(Left, Right) ->
    case Left of
        [] ->
            Right;

        [Item | Rest] ->
            [Item | append(Rest, Right)]
    end.

-file("src/lightspeed/ops/overload_control.gleam", 249).
?DOC(" Recommended mitigation set for one signal/status pair.\n").
-spec recommended_mitigations(overload_signal(), status(), thresholds()) -> list(mitigation()).
recommended_mitigations(Signal, Status, Thresholds) ->
    case Status of
        healthy ->
            [];

        warning ->
            _pipe = [{shed_events, 15},
                {throttle_cadence, erlang:element(4, Thresholds)}],
            append(_pipe, tenant_mitigation(erlang:element(4, Signal)));

        critical ->
            _pipe@1 = [{shed_events, 45},
                {throttle_cadence, erlang:element(4, Thresholds)},
                enter_read_only_mode],
            append(_pipe@1, tenant_mitigation(erlang:element(4, Signal)))
    end.

-file("src/lightspeed/ops/overload_control.gleam", 406).
?DOC(" Active mitigations in stable order.\n").
-spec active_mitigations(runtime()) -> list(mitigation()).
active_mitigations(Runtime) ->
    lists:reverse(erlang:element(4, Runtime)).

-file("src/lightspeed/ops/overload_control.gleam", 449).
?DOC(" Stable status label.\n").
-spec status_label(status()) -> binary().
status_label(Status) ->
    case Status of
        healthy ->
            <<"healthy"/utf8>>;

        warning ->
            <<"warning"/utf8>>;

        critical ->
            <<"critical"/utf8>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 469).
?DOC(" Stable decision label.\n").
-spec decision_label(decision()) -> binary().
decision_label(Decision) ->
    case Decision of
        applied ->
            <<"applied"/utf8>>;

        rolled_back ->
            <<"rolled_back"/utf8>>;

        {blocked_by_hook, Hook_name} ->
            <<"blocked_by_hook:"/utf8, Hook_name/binary>>;

        {noop, Reason} ->
            <<"noop:"/utf8, Reason/binary>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 458).
?DOC(" Stable mitigation label.\n").
-spec mitigation_label(mitigation()) -> binary().
mitigation_label(Mitigation) ->
    case Mitigation of
        {shed_events, Percent} ->
            <<"shed_events:"/utf8, (erlang:integer_to_binary(Percent))/binary>>;

        {throttle_cadence, Max_events_per_sec} ->
            <<"throttle_cadence:"/utf8,
                (erlang:integer_to_binary(Max_events_per_sec))/binary>>;

        {enforce_tenant_budget, Tenant_id} ->
            <<"enforce_tenant_budget:"/utf8, Tenant_id/binary>>;

        enter_read_only_mode ->
            <<"enter_read_only_mode"/utf8>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 588).
?DOC(" Convert one audit entry into a deterministic overload metric.\n").
-spec audit_metric(audit_entry()) -> lightspeed@ops@telemetry:metric().
audit_metric(Entry) ->
    {counter,
        <<"lightspeed.overload.mitigation_total"/utf8>>,
        1,
        [{tag, <<"actor_id"/utf8>>, erlang:element(2, Entry)},
            {tag, <<"hook"/utf8>>, erlang:element(8, Entry)},
            {tag,
                <<"mitigation"/utf8>>,
                mitigation_label(erlang:element(3, Entry))},
            {tag, <<"decision"/utf8>>, decision_label(erlang:element(4, Entry))},
            {tag, <<"status"/utf8>>, status_label(erlang:element(7, Entry))}]}.

-file("src/lightspeed/ops/overload_control.gleam", 859).
-spec record_audit(runtime(), audit_entry()) -> runtime().
record_audit(Runtime, Entry) ->
    {runtime,
        erlang:element(2, Runtime),
        erlang:element(3, Runtime),
        erlang:element(4, Runtime),
        [Entry | erlang:element(5, Runtime)],
        [audit_metric(Entry) | erlang:element(6, Runtime)]}.

-file("src/lightspeed/ops/overload_control.gleam", 883).
-spec remove_mitigation(list(mitigation()), mitigation()) -> list(mitigation()).
remove_mitigation(Mitigations, Expected) ->
    case Mitigations of
        [] ->
            [];

        [Mitigation | Rest] ->
            case Mitigation =:= Expected of
                true ->
                    remove_mitigation(Rest, Expected);

                false ->
                    [Mitigation | remove_mitigation(Rest, Expected)]
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 875).
-spec has_mitigation(list(mitigation()), mitigation()) -> boolean().
has_mitigation(Mitigations, Expected) ->
    case Mitigations of
        [] ->
            false;

        [Mitigation | Rest] ->
            (Mitigation =:= Expected) orelse has_mitigation(Rest, Expected)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 797).
-spec rollback(runtime(), mitigation(), binary(), binary(), integer(), status()) -> runtime().
rollback(Runtime, Mitigation, Actor_id, Reason, At_ms, Status) ->
    case has_mitigation(erlang:element(4, Runtime), Mitigation) of
        true ->
            _pipe = {runtime,
                erlang:element(2, Runtime),
                erlang:element(3, Runtime),
                remove_mitigation(erlang:element(4, Runtime), Mitigation),
                erlang:element(5, Runtime),
                erlang:element(6, Runtime)},
            record_audit(
                _pipe,
                {audit_entry,
                    Actor_id,
                    Mitigation,
                    rolled_back,
                    Reason,
                    At_ms,
                    Status,
                    erlang:element(2, erlang:element(3, Runtime))}
            );

        false ->
            record_audit(
                Runtime,
                {audit_entry,
                    Actor_id,
                    Mitigation,
                    {noop, <<"not_active"/utf8>>},
                    Reason,
                    At_ms,
                    Status,
                    erlang:element(2, erlang:element(3, Runtime))}
            )
    end.

-file("src/lightspeed/ops/overload_control.gleam", 701).
-spec rollback_not_desired_loop(
    runtime(),
    list(mitigation()),
    list(mitigation()),
    binary(),
    integer(),
    status()
) -> runtime().
rollback_not_desired_loop(Runtime, Active, Desired, Actor_id, Now_ms, Status) ->
    case Active of
        [] ->
            Runtime;

        [Mitigation | Rest] ->
            case has_mitigation(Desired, Mitigation) of
                true ->
                    rollback_not_desired_loop(
                        Runtime,
                        Rest,
                        Desired,
                        Actor_id,
                        Now_ms + 1,
                        Status
                    );

                false ->
                    rollback_not_desired_loop(
                        rollback(
                            Runtime,
                            Mitigation,
                            Actor_id,
                            <<"adaptive_reconcile"/utf8>>,
                            Now_ms,
                            Status
                        ),
                        Rest,
                        Desired,
                        Actor_id,
                        Now_ms + 1,
                        Status
                    )
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 684).
-spec rollback_not_desired(
    runtime(),
    list(mitigation()),
    binary(),
    integer(),
    status()
) -> runtime().
rollback_not_desired(Runtime, Desired, Actor_id, Now_ms, Status) ->
    rollback_not_desired_loop(
        Runtime,
        active_mitigations(Runtime),
        Desired,
        Actor_id,
        Now_ms,
        Status
    ).

-file("src/lightspeed/ops/overload_control.gleam", 866).
-spec allowed_mitigation(operator_hook(), mitigation()) -> boolean().
allowed_mitigation(Hook, Mitigation) ->
    case Mitigation of
        {shed_events, _} ->
            erlang:element(3, Hook);

        {throttle_cadence, _} ->
            erlang:element(4, Hook);

        {enforce_tenant_budget, _} ->
            erlang:element(5, Hook);

        enter_read_only_mode ->
            erlang:element(6, Hook)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 742).
-spec apply(runtime(), mitigation(), binary(), binary(), integer(), status()) -> runtime().
apply(Runtime, Mitigation, Actor_id, Reason, At_ms, Status) ->
    case has_mitigation(erlang:element(4, Runtime), Mitigation) of
        true ->
            record_audit(
                Runtime,
                {audit_entry,
                    Actor_id,
                    Mitigation,
                    {noop, <<"already_active"/utf8>>},
                    Reason,
                    At_ms,
                    Status,
                    erlang:element(2, erlang:element(3, Runtime))}
            );

        false ->
            case allowed_mitigation(erlang:element(3, Runtime), Mitigation) of
                false ->
                    record_audit(
                        Runtime,
                        {audit_entry,
                            Actor_id,
                            Mitigation,
                            {blocked_by_hook,
                                erlang:element(2, erlang:element(3, Runtime))},
                            Reason,
                            At_ms,
                            Status,
                            erlang:element(2, erlang:element(3, Runtime))}
                    );

                true ->
                    _pipe = {runtime,
                        erlang:element(2, Runtime),
                        erlang:element(3, Runtime),
                        [Mitigation | erlang:element(4, Runtime)],
                        erlang:element(5, Runtime),
                        erlang:element(6, Runtime)},
                    record_audit(
                        _pipe,
                        {audit_entry,
                            Actor_id,
                            Mitigation,
                            applied,
                            Reason,
                            At_ms,
                            Status,
                            erlang:element(2, erlang:element(3, Runtime))}
                    )
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 657).
-spec apply_desired(
    runtime(),
    list(mitigation()),
    binary(),
    integer(),
    status()
) -> runtime().
apply_desired(Runtime, Desired, Actor_id, Now_ms, Status) ->
    case Desired of
        [] ->
            Runtime;

        [Mitigation | Rest] ->
            apply_desired(
                apply(
                    Runtime,
                    Mitigation,
                    Actor_id,
                    <<"adaptive_reconcile"/utf8>>,
                    Now_ms,
                    Status
                ),
                Rest,
                Actor_id,
                Now_ms + 1,
                Status
            )
    end.

-file("src/lightspeed/ops/overload_control.gleam", 646).
-spec reconcile_mitigations(
    runtime(),
    list(mitigation()),
    binary(),
    integer(),
    status()
) -> runtime().
reconcile_mitigations(Runtime, Desired, Actor_id, Now_ms, Status) ->
    Applied = apply_desired(Runtime, Desired, Actor_id, Now_ms, Status),
    rollback_not_desired(Applied, Desired, Actor_id, Now_ms + 1, Status).

-file("src/lightspeed/ops/overload_control.gleam", 277).
?DOC(" Evaluate one overload signal and reconcile adaptive mitigations.\n").
-spec evaluate(runtime(), overload_signal(), binary(), integer()) -> {runtime(),
    status()}.
evaluate(Runtime, Signal, Actor_id, Now_ms) ->
    Status = classify(Signal, erlang:element(2, Runtime)),
    Desired = recommended_mitigations(
        Signal,
        Status,
        erlang:element(2, Runtime)
    ),
    {reconcile_mitigations(Runtime, Desired, Actor_id, Now_ms, Status), Status}.

-file("src/lightspeed/ops/overload_control.gleam", 839).
-spec rollback_all(runtime(), list(mitigation()), binary(), integer(), status()) -> runtime().
rollback_all(Runtime, Mitigations, Actor_id, At_ms, Status) ->
    case Mitigations of
        [] ->
            Runtime;

        [Mitigation | Rest] ->
            rollback_all(
                rollback(
                    Runtime,
                    Mitigation,
                    Actor_id,
                    <<"rollback_drill"/utf8>>,
                    At_ms,
                    Status
                ),
                Rest,
                Actor_id,
                At_ms + 1,
                Status
            )
    end.

-file("src/lightspeed/ops/overload_control.gleam", 290).
?DOC(" Execute one rollback drill by rolling back all active mitigations.\n").
-spec run_rollback_drill(runtime(), binary(), integer(), status()) -> runtime().
run_rollback_drill(Runtime, Actor_id, Now_ms, Status) ->
    rollback_all(Runtime, active_mitigations(Runtime), Actor_id, Now_ms, Status).

-file("src/lightspeed/ops/overload_control.gleam", 300).
?DOC(" Stress budgets for M50 certification.\n").
-spec default_stress_budgets() -> list(stress_budget()).
default_stress_budgets() ->
    [{stress_budget, queue_depth_spike, 215, 210, 74, 2, true},
        {stress_budget, cadence_storm, 180, 360, 70, 3, true},
        {stress_budget, tenant_budget_hotspot, 160, 230, 98, 3, true},
        {stress_budget, combined_pressure, 260, 380, 99, 4, true}].

-file("src/lightspeed/ops/overload_control.gleam", 919).
-spec all_mitigations_allowed(operator_hook(), list(mitigation())) -> boolean().
all_mitigations_allowed(Hook, Mitigations) ->
    case Mitigations of
        [] ->
            true;

        [Mitigation | Rest] ->
            allowed_mitigation(Hook, Mitigation) andalso all_mitigations_allowed(
                Hook,
                Rest
            )
    end.

-file("src/lightspeed/ops/overload_control.gleam", 436).
?DOC(" `True` when active mitigations are compliant with the operator hook.\n").
-spec policy_compliant(runtime()) -> boolean().
policy_compliant(Runtime) ->
    all_mitigations_allowed(
        erlang:element(3, Runtime),
        active_mitigations(Runtime)
    ).

-file("src/lightspeed/ops/overload_control.gleam", 421).
?DOC(" Mitigation reversibility indicator.\n").
-spec mitigation_reversible(mitigation()) -> boolean().
mitigation_reversible(Mitigation) ->
    case Mitigation of
        {shed_events, _} ->
            true;

        {throttle_cadence, _} ->
            true;

        {enforce_tenant_budget, _} ->
            true;

        enter_read_only_mode ->
            true
    end.

-file("src/lightspeed/ops/overload_control.gleam", 911).
-spec all_mitigations_reversible(list(mitigation())) -> boolean().
all_mitigations_reversible(Mitigations) ->
    case Mitigations of
        [] ->
            true;

        [Mitigation | Rest] ->
            mitigation_reversible(Mitigation) andalso all_mitigations_reversible(
                Rest
            )
    end.

-file("src/lightspeed/ops/overload_control.gleam", 431).
?DOC(" `True` when all active mitigations are reversible.\n").
-spec active_mitigations_reversible(runtime()) -> boolean().
active_mitigations_reversible(Runtime) ->
    all_mitigations_reversible(active_mitigations(Runtime)).

-file("src/lightspeed/ops/overload_control.gleam", 897).
-spec unique_mitigations(list(mitigation()), list(mitigation())) -> boolean().
unique_mitigations(Mitigations, Seen) ->
    case Mitigations of
        [] ->
            true;

        [Mitigation | Rest] ->
            case has_mitigation(Seen, Mitigation) of
                true ->
                    false;

                false ->
                    unique_mitigations(Rest, [Mitigation | Seen])
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 634).
-spec thresholds_valid(thresholds()) -> boolean().
thresholds_valid(Thresholds) ->
    ((((((erlang:element(2, Thresholds) > 0) andalso (erlang:element(
        3,
        Thresholds
    )
    >= erlang:element(2, Thresholds)))
    andalso (erlang:element(4, Thresholds) > 0))
    andalso (erlang:element(5, Thresholds) >= erlang:element(4, Thresholds)))
    andalso (erlang:element(6, Thresholds) >= 0))
    andalso (erlang:element(7, Thresholds) >= erlang:element(6, Thresholds)))
    andalso (erlang:element(7, Thresholds) =< 100).

-file("src/lightspeed/ops/overload_control.gleam", 441).
?DOC(" Runtime invariants.\n").
-spec valid(runtime()) -> boolean().
valid(Runtime) ->
    ((thresholds_valid(erlang:element(2, Runtime)) andalso (erlang:element(
        7,
        erlang:element(3, Runtime)
    )
    > 0))
    andalso unique_mitigations(active_mitigations(Runtime), []))
    andalso active_mitigations_reversible(Runtime).

-file("src/lightspeed/ops/overload_control.gleam", 1015).
-spec peak_tenant_budget(list(overload_signal()), integer()) -> integer().
peak_tenant_budget(Signals, Peak) ->
    case Signals of
        [] ->
            Peak;

        [Signal | Rest] ->
            Next_peak = case erlang:element(5, Signal) > Peak of
                true ->
                    erlang:element(5, Signal);

                false ->
                    Peak
            end,
            peak_tenant_budget(Rest, Next_peak)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 1002).
-spec peak_event_cadence(list(overload_signal()), integer()) -> integer().
peak_event_cadence(Signals, Peak) ->
    case Signals of
        [] ->
            Peak;

        [Signal | Rest] ->
            Next_peak = case erlang:element(3, Signal) > Peak of
                true ->
                    erlang:element(3, Signal);

                false ->
                    Peak
            end,
            peak_event_cadence(Rest, Next_peak)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 989).
-spec peak_queue_depth(list(overload_signal()), integer()) -> integer().
peak_queue_depth(Signals, Peak) ->
    case Signals of
        [] ->
            Peak;

        [Signal | Rest] ->
            Next_peak = case erlang:element(2, Signal) > Peak of
                true ->
                    erlang:element(2, Signal);

                false ->
                    Peak
            end,
            peak_queue_depth(Rest, Next_peak)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 978).
-spec count_decision(list(audit_entry()), binary()) -> integer().
count_decision(Audits, Expected_label) ->
    case Audits of
        [] ->
            0;

        [Entry | Rest] ->
            case decision_label(erlang:element(4, Entry)) =:= Expected_label of
                true ->
                    1 + count_decision(Rest, Expected_label);

                false ->
                    count_decision(Rest, Expected_label)
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 411).
?DOC(" Audit entries in stable order.\n").
-spec audit_entries(runtime()) -> list(audit_entry()).
audit_entries(Runtime) ->
    lists:reverse(erlang:element(5, Runtime)).

-file("src/lightspeed/ops/overload_control.gleam", 963).
-spec evaluate_signals(runtime(), list(overload_signal()), binary(), integer()) -> runtime().
evaluate_signals(Runtime, Signals, Actor_id, At_ms) ->
    case Signals of
        [] ->
            Runtime;

        [Signal | Rest] ->
            {Next_runtime, _} = evaluate(Runtime, Signal, Actor_id, At_ms),
            evaluate_signals(Next_runtime, Rest, Actor_id, At_ms + 5)
    end.

-file("src/lightspeed/ops/overload_control.gleam", 931).
-spec simulate_stress(stress_scenario(), list(overload_signal()), integer()) -> stress_observation().
simulate_stress(Scenario, Signals, Base_time_ms) ->
    Runtime = new(default_thresholds(), default_hook()),
    After_signals = evaluate_signals(
        Runtime,
        Signals,
        <<"autopilot"/utf8>>,
        Base_time_ms
    ),
    Rolled_back = run_rollback_drill(
        After_signals,
        <<"autopilot"/utf8>>,
        Base_time_ms + 50,
        critical
    ),
    Audits = audit_entries(Rolled_back),
    Mitigations_applied = count_decision(Audits, <<"applied"/utf8>>),
    Rollbacks_executed = count_decision(Audits, <<"rolled_back"/utf8>>),
    Peak_queue_depth = peak_queue_depth(Signals, 0),
    Peak_event_cadence = peak_event_cadence(Signals, 0),
    Peak_tenant_budget = peak_tenant_budget(Signals, 0),
    Bounded = (valid(Rolled_back) andalso policy_compliant(Rolled_back)) andalso (Rollbacks_executed
    >= Mitigations_applied),
    {stress_observation,
        Scenario,
        Peak_queue_depth,
        Peak_event_cadence,
        Peak_tenant_budget,
        Mitigations_applied,
        Rollbacks_executed,
        Bounded}.

-file("src/lightspeed/ops/overload_control.gleam", 338).
?DOC(" Run deterministic stress simulations for M50.\n").
-spec run_stress_simulation() -> list(stress_observation()).
run_stress_simulation() ->
    [simulate_stress(
            queue_depth_spike,
            [signal(130, 170, <<""/utf8>>, 70),
                signal(210, 205, <<""/utf8>>, 74)],
            1
        ),
        simulate_stress(
            cadence_storm,
            [signal(125, 260, <<""/utf8>>, 68),
                signal(170, 350, <<""/utf8>>, 70)],
            1000
        ),
        simulate_stress(
            tenant_budget_hotspot,
            [signal(140, 220, <<"tenant-alpha"/utf8>>, 84),
                signal(158, 228, <<"tenant-alpha"/utf8>>, 97)],
            2000
        ),
        simulate_stress(
            combined_pressure,
            [signal(155, 240, <<"tenant-bravo"/utf8>>, 88),
                signal(255, 370, <<"tenant-bravo"/utf8>>, 99)],
            3000
        )].

-file("src/lightspeed/ops/overload_control.gleam", 1123).
-spec bool_label(boolean()) -> binary().
bool_label(Value) ->
    case Value of
        true ->
            <<"true"/utf8>>;

        false ->
            <<"false"/utf8>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 1102).
-spec budget_for_scenario(stress_scenario(), list(stress_budget())) -> {ok,
        stress_budget()} |
    {error, binary()}.
budget_for_scenario(Scenario, Budgets) ->
    case Budgets of
        [] ->
            {error, <<"missing_stress_budget"/utf8>>};

        [Budget | Rest] ->
            case erlang:element(2, Budget) =:= Scenario of
                true ->
                    {ok, Budget};

                false ->
                    budget_for_scenario(Scenario, Rest)
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 1042).
-spec evaluate_one_budget(stress_observation(), list(stress_budget())) -> budget_result().
evaluate_one_budget(Observation, Budgets) ->
    case budget_for_scenario(erlang:element(2, Observation), Budgets) of
        {error, Reason} ->
            {budget_result, erlang:element(2, Observation), false, Reason};

        {ok, Budget} ->
            Queue_ok = erlang:element(3, Observation) =< erlang:element(
                3,
                Budget
            ),
            Cadence_ok = erlang:element(4, Observation) =< erlang:element(
                4,
                Budget
            ),
            Tenant_ok = erlang:element(5, Observation) =< erlang:element(
                5,
                Budget
            ),
            Mitigation_ok = erlang:element(6, Observation) >= erlang:element(
                6,
                Budget
            ),
            Rollback_ok = case erlang:element(7, Budget) of
                true ->
                    erlang:element(7, Observation) > 0;

                false ->
                    true
            end,
            Bounded_ok = erlang:element(8, Observation),
            Passed = ((((Queue_ok andalso Cadence_ok) andalso Tenant_ok) andalso Mitigation_ok)
            andalso Rollback_ok)
            andalso Bounded_ok,
            Reason@1 = case Passed of
                true ->
                    <<"within_budget"/utf8>>;

                false ->
                    <<<<<<<<<<<<<<<<<<<<<<<<"budget_exceeded:"/utf8,
                                                                    "queue="/utf8>>/binary,
                                                                (bool_label(
                                                                    Queue_ok
                                                                ))/binary>>/binary,
                                                            ":cadence="/utf8>>/binary,
                                                        (bool_label(Cadence_ok))/binary>>/binary,
                                                    ":tenant="/utf8>>/binary,
                                                (bool_label(Tenant_ok))/binary>>/binary,
                                            ":mitigations="/utf8>>/binary,
                                        (bool_label(Mitigation_ok))/binary>>/binary,
                                    ":rollback="/utf8>>/binary,
                                (bool_label(Rollback_ok))/binary>>/binary,
                            ":bounded="/utf8>>/binary,
                        (bool_label(Bounded_ok))/binary>>
            end,
            {budget_result, erlang:element(2, Observation), Passed, Reason@1}
    end.

-file("src/lightspeed/ops/overload_control.gleam", 1028).
-spec evaluate_budgets_loop(
    list(stress_observation()),
    list(stress_budget()),
    list(budget_result())
) -> list(budget_result()).
evaluate_budgets_loop(Observations, Budgets, Results_rev) ->
    case Observations of
        [] ->
            lists:reverse(Results_rev);

        [Observation | Rest] ->
            Result = evaluate_one_budget(Observation, Budgets),
            evaluate_budgets_loop(Rest, Budgets, [Result | Results_rev])
    end.

-file("src/lightspeed/ops/overload_control.gleam", 376).
?DOC(" Evaluate stress observations against one budget profile.\n").
-spec evaluate_stress_budgets(list(stress_observation()), list(stress_budget())) -> list(budget_result()).
evaluate_stress_budgets(Observations, Budgets) ->
    evaluate_budgets_loop(Observations, Budgets, []).

-file("src/lightspeed/ops/overload_control.gleam", 384).
?DOC(" Count failing stress budgets.\n").
-spec budget_failures(list(budget_result())) -> integer().
budget_failures(Results) ->
    case Results of
        [] ->
            0;

        [Result | Rest] ->
            case erlang:element(3, Result) of
                true ->
                    budget_failures(Rest);

                false ->
                    1 + budget_failures(Rest)
            end
    end.

-file("src/lightspeed/ops/overload_control.gleam", 396).
?DOC(" Runtime threshold accessor.\n").
-spec runtime_thresholds(runtime()) -> thresholds().
runtime_thresholds(Runtime) ->
    erlang:element(2, Runtime).

-file("src/lightspeed/ops/overload_control.gleam", 401).
?DOC(" Runtime operator hook accessor.\n").
-spec runtime_hook(runtime()) -> operator_hook().
runtime_hook(Runtime) ->
    erlang:element(3, Runtime).

-file("src/lightspeed/ops/overload_control.gleam", 416).
?DOC(" Telemetry metrics in stable order.\n").
-spec telemetry_metrics(runtime()) -> list(lightspeed@ops@telemetry:metric()).
telemetry_metrics(Runtime) ->
    lists:reverse(erlang:element(6, Runtime)).

-file("src/lightspeed/ops/overload_control.gleam", 620).
-spec tenant_label(binary()) -> binary().
tenant_label(Tenant_id) ->
    case Tenant_id =:= <<""/utf8>> of
        true ->
            <<"none"/utf8>>;

        false ->
            Tenant_id
    end.

-file("src/lightspeed/ops/overload_control.gleam", 479).
?DOC(" Stable signal label.\n").
-spec signal_label(overload_signal()) -> binary().
signal_label(Signal) ->
    <<<<<<<<<<<<<<"queue="/utf8,
                                (erlang:integer_to_binary(
                                    erlang:element(2, Signal)
                                ))/binary>>/binary,
                            "|cadence="/utf8>>/binary,
                        (erlang:integer_to_binary(erlang:element(3, Signal)))/binary>>/binary,
                    "|tenant="/utf8>>/binary,
                (tenant_label(erlang:element(4, Signal)))/binary>>/binary,
            "|tenant_budget="/utf8>>/binary,
        (erlang:integer_to_binary(erlang:element(5, Signal)))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 491).
?DOC(" Stable threshold label.\n").
-spec thresholds_label(thresholds()) -> binary().
thresholds_label(Thresholds) ->
    <<<<<<<<<<<<<<<<<<<<<<"warn_queue="/utf8,
                                                (erlang:integer_to_binary(
                                                    erlang:element(
                                                        2,
                                                        Thresholds
                                                    )
                                                ))/binary>>/binary,
                                            ",critical_queue="/utf8>>/binary,
                                        (erlang:integer_to_binary(
                                            erlang:element(3, Thresholds)
                                        ))/binary>>/binary,
                                    ",warn_cadence="/utf8>>/binary,
                                (erlang:integer_to_binary(
                                    erlang:element(4, Thresholds)
                                ))/binary>>/binary,
                            ",critical_cadence="/utf8>>/binary,
                        (erlang:integer_to_binary(erlang:element(5, Thresholds)))/binary>>/binary,
                    ",warn_tenant="/utf8>>/binary,
                (erlang:integer_to_binary(erlang:element(6, Thresholds)))/binary>>/binary,
            ",critical_tenant="/utf8>>/binary,
        (erlang:integer_to_binary(erlang:element(7, Thresholds)))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 507).
?DOC(" Stable operator-hook label.\n").
-spec hook_label(operator_hook()) -> binary().
hook_label(Hook) ->
    <<<<<<<<<<<<<<<<<<<<(erlang:element(2, Hook))/binary, "|shed="/utf8>>/binary,
                                        (bool_label(erlang:element(3, Hook)))/binary>>/binary,
                                    "|throttle="/utf8>>/binary,
                                (bool_label(erlang:element(4, Hook)))/binary>>/binary,
                            "|tenant="/utf8>>/binary,
                        (bool_label(erlang:element(5, Hook)))/binary>>/binary,
                    "|read_only="/utf8>>/binary,
                (bool_label(erlang:element(6, Hook)))/binary>>/binary,
            "|rollback_window_ms="/utf8>>/binary,
        (erlang:integer_to_binary(erlang:element(7, Hook)))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 522).
?DOC(" Stable audit-entry label.\n").
-spec audit_label(audit_entry()) -> binary().
audit_label(Entry) ->
    <<<<<<<<<<<<<<<<<<<<<<<<<<"actor="/utf8, (erlang:element(2, Entry))/binary>>/binary,
                                                    "|mitigation="/utf8>>/binary,
                                                (mitigation_label(
                                                    erlang:element(3, Entry)
                                                ))/binary>>/binary,
                                            "|decision="/utf8>>/binary,
                                        (decision_label(
                                            erlang:element(4, Entry)
                                        ))/binary>>/binary,
                                    "|status="/utf8>>/binary,
                                (status_label(erlang:element(7, Entry)))/binary>>/binary,
                            "|hook="/utf8>>/binary,
                        (erlang:element(8, Entry))/binary>>/binary,
                    "|at_ms="/utf8>>/binary,
                (erlang:integer_to_binary(erlang:element(6, Entry)))/binary>>/binary,
            "|reason="/utf8>>/binary,
        (erlang:element(5, Entry))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 1130).
-spec join_with(binary(), list(binary())) -> binary().
join_with(Separator, Values) ->
    case Values of
        [] ->
            <<""/utf8>>;

        [Value] ->
            Value;

        [Value@1 | Rest] ->
            <<<<Value@1/binary, Separator/binary>>/binary,
                (join_with(Separator, Rest))/binary>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 540).
?DOC(" Stable runtime signature.\n").
-spec signature(runtime()) -> binary().
signature(Runtime) ->
    <<<<<<<<<<<<<<"thresholds="/utf8,
                                (thresholds_label(erlang:element(2, Runtime)))/binary>>/binary,
                            "|hook="/utf8>>/binary,
                        (hook_label(erlang:element(3, Runtime)))/binary>>/binary,
                    "|active="/utf8>>/binary,
                (join_with(
                    <<","/utf8>>,
                    gleam@list:map(
                        active_mitigations(Runtime),
                        fun mitigation_label/1
                    )
                ))/binary>>/binary,
            "|audits="/utf8>>/binary,
        (join_with(
            <<";"/utf8>>,
            gleam@list:map(audit_entries(Runtime), fun audit_label/1)
        ))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 552).
?DOC(" Stable stress-scenario label.\n").
-spec stress_scenario_label(stress_scenario()) -> binary().
stress_scenario_label(Scenario) ->
    case Scenario of
        queue_depth_spike ->
            <<"queue_depth_spike"/utf8>>;

        cadence_storm ->
            <<"cadence_storm"/utf8>>;

        tenant_budget_hotspot ->
            <<"tenant_budget_hotspot"/utf8>>;

        combined_pressure ->
            <<"combined_pressure"/utf8>>
    end.

-file("src/lightspeed/ops/overload_control.gleam", 562).
?DOC(" Stable stress-observation signature.\n").
-spec stress_observation_signature(stress_observation()) -> binary().
stress_observation_signature(Observation) ->
    <<<<<<<<<<<<<<<<<<<<<<<<(stress_scenario_label(
                                                        erlang:element(
                                                            2,
                                                            Observation
                                                        )
                                                    ))/binary,
                                                    ":peak_queue="/utf8>>/binary,
                                                (erlang:integer_to_binary(
                                                    erlang:element(
                                                        3,
                                                        Observation
                                                    )
                                                ))/binary>>/binary,
                                            ":peak_cadence="/utf8>>/binary,
                                        (erlang:integer_to_binary(
                                            erlang:element(4, Observation)
                                        ))/binary>>/binary,
                                    ":peak_tenant_budget="/utf8>>/binary,
                                (erlang:integer_to_binary(
                                    erlang:element(5, Observation)
                                ))/binary>>/binary,
                            ":mitigations="/utf8>>/binary,
                        (erlang:integer_to_binary(
                            erlang:element(6, Observation)
                        ))/binary>>/binary,
                    ":rollbacks="/utf8>>/binary,
                (erlang:integer_to_binary(erlang:element(7, Observation)))/binary>>/binary,
            ":bounded="/utf8>>/binary,
        (bool_label(erlang:element(8, Observation)))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 579).
?DOC(" Stable stress-budget result signature.\n").
-spec budget_result_signature(budget_result()) -> binary().
budget_result_signature(Result) ->
    <<<<<<<<(stress_scenario_label(erlang:element(2, Result)))/binary,
                    ":passed="/utf8>>/binary,
                (bool_label(erlang:element(3, Result)))/binary>>/binary,
            ":reason="/utf8>>/binary,
        (erlang:element(4, Result))/binary>>.

-file("src/lightspeed/ops/overload_control.gleam", 606).
?DOC(" Audit entry decision accessor.\n").
-spec audit_decision(audit_entry()) -> decision().
audit_decision(Entry) ->
    erlang:element(4, Entry).

-file("src/lightspeed/ops/overload_control.gleam", 611).
?DOC(" Audit entry mitigation accessor.\n").
-spec audit_mitigation(audit_entry()) -> mitigation().
audit_mitigation(Entry) ->
    erlang:element(3, Entry).

-file("src/lightspeed/ops/overload_control.gleam", 616).
?DOC(" Stress observation scenario accessor.\n").
-spec stress_scenario(stress_observation()) -> stress_scenario().
stress_scenario(Observation) ->
    erlang:element(2, Observation).