-module(lightspeed@ops@operations_kit).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/ops/operations_kit.gleam").
-export([canonical_runbooks/0, required_workflows/0, workflow_contract/1, workflow_plans/0, dashboards/0, drill_scenarios/0, runbook_valid/1, runbooks_cover_domains/0, workflow_contracts_safe/0, dashboards_cover_alert_contracts/0, drills_reproducible/0, operations_kit_ready/0, domain_label/1, workflow_label/1, runbook_signature/1, workflow_plan_signature/1, dashboard_signature/1, drill_signature/1, operations_kit_signature/0]).
-export_type([domain/0, workflow_action/0, step/0, runbook/0, workflow_plan/0, alert_contract/0, dashboard/0, drill_scenario/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(" Production app operations-kit contracts for M40.\n").
-type domain() :: runtime | transport | data | etl.
-type workflow_action() :: rollout | rollback | drain | replay | recover.
-type step() :: {step, binary(), binary(), binary(), boolean()}.
-type runbook() :: {runbook, domain(), binary(), binary(), list(step())}.
-type workflow_plan() :: {workflow_plan,
workflow_action(),
boolean(),
boolean(),
list(binary()),
list(binary()),
list(binary())}.
-type alert_contract() :: {alert_contract,
binary(),
binary(),
binary(),
binary(),
binary()}.
-type dashboard() :: {dashboard,
binary(),
list(binary()),
list(alert_contract())}.
-type drill_scenario() :: {drill_scenario,
binary(),
domain(),
workflow_action(),
binary(),
list(binary()),
binary()}.
-file("src/lightspeed/ops/operations_kit.gleam", 603).
-spec etl_reliability_runbook() -> runbook().
etl_reliability_runbook() ->
{runbook,
etl,
<<"etl_reliability"/utf8>>,
<<"slo_budget_failure_or_poison_message_escalation"/utf8>>,
[{step,
<<"pause_affected_pipelines"/utf8>>,
<<"Pause affected pipelines and capture backlog profile."/utf8>>,
<<"audit.etl.pause"/utf8>>,
true},
{step,
<<"classify_failure_path"/utf8>>,
<<"Classify outage, poison, replay, or schema fault class."/utf8>>,
<<"audit.etl.classification"/utf8>>,
false},
{step,
<<"apply_recovery_strategy"/utf8>>,
<<"Apply drain or replay strategy with checkpoint evidence."/utf8>>,
<<"audit.etl.recovery_strategy"/utf8>>,
true},
{step,
<<"verify_slo_recovery"/utf8>>,
<<"Verify lag, throughput, retry-rate, and replay SLO recovery."/utf8>>,
<<"dashboard.etl.slo_recovery"/utf8>>,
false},
{step,
<<"resume_and_handoff"/utf8>>,
<<"Resume flows and publish on-call handoff summary."/utf8>>,
<<"audit.etl.handoff"/utf8>>,
true}]}.
-file("src/lightspeed/ops/operations_kit.gleam", 563).
-spec data_integrity_runbook() -> runbook().
data_integrity_runbook() ->
{runbook,
data,
<<"data_integrity"/utf8>>,
<<"checkpoint_drift_or_schema_quality_failure"/utf8>>,
[{step,
<<"freeze_mutating_writes"/utf8>>,
<<"Freeze mutating writes for affected streams."/utf8>>,
<<"audit.data.freeze"/utf8>>,
true},
{step,
<<"select_replay_checkpoint"/utf8>>,
<<"Select replay checkpoint and validate idempotency scope."/utf8>>,
<<"audit.data.checkpoint"/utf8>>,
true},
{step,
<<"run_quality_guard"/utf8>>,
<<"Run payload-quality and schema compatibility guards."/utf8>>,
<<"audit.data.quality_guard"/utf8>>,
false},
{step,
<<"execute_replay"/utf8>>,
<<"Replay affected windows with duplicate-sink suppression."/utf8>>,
<<"audit.data.replay"/utf8>>,
true},
{step,
<<"thaw_writes"/utf8>>,
<<"Thaw writes after deterministic reconciliation checks."/utf8>>,
<<"audit.data.thaw"/utf8>>,
true}]}.
-file("src/lightspeed/ops/operations_kit.gleam", 523).
-spec transport_degradation_runbook() -> runbook().
transport_degradation_runbook() ->
{runbook,
transport,
<<"transport_degradation"/utf8>>,
<<"ack_latency_or_receive_errors_over_budget"/utf8>>,
[{step,
<<"confirm_transport_profile"/utf8>>,
<<"Confirm active transport profile and fallback state."/utf8>>,
<<"audit.transport.profile"/utf8>>,
false},
{step,
<<"drain_high_risk_topics"/utf8>>,
<<"Drain high-risk channels and freeze high-churn pushes."/utf8>>,
<<"audit.transport.drain"/utf8>>,
true},
{step,
<<"activate_fallback_mode"/utf8>>,
<<"Activate progressive fallback and rate controls."/utf8>>,
<<"audit.transport.fallback"/utf8>>,
true},
{step,
<<"verify_ack_recovery"/utf8>>,
<<"Verify p95 ack-latency and receive-error recovery."/utf8>>,
<<"dashboard.transport.recovery"/utf8>>,
false},
{step,
<<"resume_normal_flow"/utf8>>,
<<"Resume normal transport profile after guard checks."/utf8>>,
<<"audit.transport.resume"/utf8>>,
true}]}.
-file("src/lightspeed/ops/operations_kit.gleam", 483).
-spec runtime_incident_runbook() -> runbook().
runtime_incident_runbook() ->
{runbook,
runtime,
<<"runtime_incident"/utf8>>,
<<"crash_rate_or_heartbeat_timeout_spike"/utf8>>,
[{step,
<<"capture_release_fingerprint"/utf8>>,
<<"Capture deploy digest and scope impacted sessions."/utf8>>,
<<"audit.release.digest"/utf8>>,
false},
{step,
<<"enable_guardrails"/utf8>>,
<<"Enable mitigation controls for high-risk routes."/utf8>>,
<<"audit.runtime.guardrail_change"/utf8>>,
true},
{step,
<<"execute_safe_rollback"/utf8>>,
<<"Rollback to last known good artifact with dual control."/utf8>>,
<<"audit.runtime.rollback"/utf8>>,
true},
{step,
<<"verify_session_recovery"/utf8>>,
<<"Verify reconnect and patch-ack recovery across canary set."/utf8>>,
<<"trace.runtime.recovery"/utf8>>,
false},
{step,
<<"publish_handoff_summary"/utf8>>,
<<"Publish incident timeline and next actions."/utf8>>,
<<"audit.incident.handoff"/utf8>>,
false}]}.
-file("src/lightspeed/ops/operations_kit.gleam", 73).
?DOC(" Canonical M40 runbooks.\n").
-spec canonical_runbooks() -> list(runbook()).
canonical_runbooks() ->
[runtime_incident_runbook(),
transport_degradation_runbook(),
data_integrity_runbook(),
etl_reliability_runbook()].
-file("src/lightspeed/ops/operations_kit.gleam", 83).
?DOC(" Required operator-safe workflows for M40.\n").
-spec required_workflows() -> list(workflow_action()).
required_workflows() ->
[rollout, rollback, drain, replay, recover].
-file("src/lightspeed/ops/operations_kit.gleam", 99).
?DOC(" Contract for one operator workflow.\n").
-spec workflow_contract(workflow_action()) -> workflow_plan().
workflow_contract(Action) ->
case Action of
rollout ->
{workflow_plan,
rollout,
true,
true,
[<<"change_ticket_linked"/utf8>>,
<<"canary_budget_green"/utf8>>,
<<"rollback_artifact_ready"/utf8>>],
[<<"operator_identity"/utf8>>,
<<"approver_identity"/utf8>>,
<<"artifact_digest"/utf8>>],
[<<"synthetic_smoke_green"/utf8>>,
<<"error_budget_guard_green"/utf8>>,
<<"customer_path_sample_green"/utf8>>]};
rollback ->
{workflow_plan,
rollback,
true,
true,
[<<"incident_ticket_linked"/utf8>>,
<<"last_known_good_digest_available"/utf8>>,
<<"data_migration_guard_confirmed"/utf8>>],
[<<"operator_identity"/utf8>>,
<<"rollback_reason"/utf8>>,
<<"rollback_target_digest"/utf8>>],
[<<"crash_rate_recovered"/utf8>>,
<<"latency_budget_recovered"/utf8>>,
<<"drift_gate_revalidated"/utf8>>]};
drain ->
{workflow_plan,
drain,
true,
true,
[<<"backlog_depth_measured"/utf8>>,
<<"downstream_sinks_healthy"/utf8>>,
<<"replay_window_checkpointed"/utf8>>],
[<<"operator_identity"/utf8>>,
<<"drain_scope"/utf8>>,
<<"checkpoint_revision"/utf8>>],
[<<"in_flight_zero"/utf8>>,
<<"queue_depth_flat"/utf8>>,
<<"replay_window_consistent"/utf8>>]};
replay ->
{workflow_plan,
replay,
true,
true,
[<<"checkpoint_revision_selected"/utf8>>,
<<"payload_quality_gate_green"/utf8>>,
<<"idempotency_keys_confirmed"/utf8>>],
[<<"operator_identity"/utf8>>,
<<"replay_start_checkpoint"/utf8>>,
<<"replay_target_scope"/utf8>>],
[<<"replay_completion_green"/utf8>>,
<<"duplicate_sink_guard_green"/utf8>>,
<<"etl_budget_recovered"/utf8>>]};
recover ->
{workflow_plan,
recover,
true,
true,
[<<"incident_classified"/utf8>>,
<<"safe_mode_controls_applied"/utf8>>,
<<"communications_window_open"/utf8>>],
[<<"operator_identity"/utf8>>,
<<"recovery_strategy"/utf8>>,
<<"timeline_reference"/utf8>>],
[<<"all_alerts_acknowledged"/utf8>>,
<<"runbook_followups_created"/utf8>>,
<<"handoff_note_published"/utf8>>]}
end.
-file("src/lightspeed/ops/operations_kit.gleam", 88).
?DOC(" M40 workflow plans.\n").
-spec workflow_plans() -> list(workflow_plan()).
workflow_plans() ->
[workflow_contract(rollout),
workflow_contract(rollback),
workflow_contract(drain),
workflow_contract(replay),
workflow_contract(recover)].
-file("src/lightspeed/ops/operations_kit.gleam", 214).
?DOC(" Standardized M40 dashboards and alert contracts.\n").
-spec dashboards() -> list(dashboard()).
dashboards() ->
[{dashboard,
<<"runtime_transport_baseline"/utf8>>,
[<<"lightspeed.session.crashed_total"/utf8>>,
<<"lightspeed.session.heartbeat_timeout_total"/utf8>>,
<<"lightspeed.transport.receive.error_total"/utf8>>,
<<"lightspeed.transport.ack_latency_p95_ms"/utf8>>],
[{alert_contract,
<<"lightspeed.session.crashed_total"/utf8>>,
<<">=3"/utf8>>,
<<"5m"/utf8>>,
<<"page"/utf8>>,
<<"runtime_incident"/utf8>>},
{alert_contract,
<<"lightspeed.transport.ack_latency_p95_ms"/utf8>>,
<<">=250"/utf8>>,
<<"10m"/utf8>>,
<<"ticket"/utf8>>,
<<"transport_degradation"/utf8>>}]},
{dashboard,
<<"data_pipeline_baseline"/utf8>>,
[<<"lightspeed.pipeline.lag_ms"/utf8>>,
<<"lightspeed.pipeline.retry_total"/utf8>>,
<<"lightspeed.pipeline.dead_letter_total"/utf8>>,
<<"lightspeed.pipeline.checkpoint_drift_total"/utf8>>],
[{alert_contract,
<<"lightspeed.pipeline.checkpoint_drift_total"/utf8>>,
<<">=1"/utf8>>,
<<"5m"/utf8>>,
<<"page"/utf8>>,
<<"data_integrity"/utf8>>},
{alert_contract,
<<"lightspeed.pipeline.lag_ms"/utf8>>,
<<">=120000"/utf8>>,
<<"15m"/utf8>>,
<<"ticket"/utf8>>,
<<"etl_reliability"/utf8>>}]},
{dashboard,
<<"etl_reliability_baseline"/utf8>>,
[<<"lightspeed.etl.slo_budget_failures_total"/utf8>>,
<<"lightspeed.etl.replay_recovery_ms"/utf8>>,
<<"lightspeed.etl.poison_message_total"/utf8>>,
<<"lightspeed.etl.schema_quality_failures_total"/utf8>>],
[{alert_contract,
<<"lightspeed.etl.slo_budget_failures_total"/utf8>>,
<<">=1"/utf8>>,
<<"5m"/utf8>>,
<<"page"/utf8>>,
<<"etl_reliability"/utf8>>},
{alert_contract,
<<"lightspeed.etl.schema_quality_failures_total"/utf8>>,
<<">=1"/utf8>>,
<<"10m"/utf8>>,
<<"ticket"/utf8>>,
<<"data_integrity"/utf8>>}]}].
-file("src/lightspeed/ops/operations_kit.gleam", 295).
?DOC(" Deterministic M40 operations drills.\n").
-spec drill_scenarios() -> list(drill_scenario()).
drill_scenarios() ->
[{drill_scenario,
<<"runtime_rollback_drill"/utf8>>,
runtime,
rollback,
<<"runtime_incident"/utf8>>,
[<<"audit.runtime.rollback.timeline"/utf8>>,
<<"trace.runtime.recovery.span"/utf8>>,
<<"dashboard.runtime_transport_baseline.snapshot"/utf8>>],
<<"m40-runtime-rollback-001"/utf8>>},
{drill_scenario,
<<"transport_drain_recover_drill"/utf8>>,
transport,
drain,
<<"transport_degradation"/utf8>>,
[<<"audit.transport.drain.timeline"/utf8>>,
<<"queue.transport.backlog.snapshot"/utf8>>,
<<"dashboard.runtime_transport_baseline.snapshot"/utf8>>],
<<"m40-transport-drain-001"/utf8>>},
{drill_scenario,
<<"data_replay_integrity_drill"/utf8>>,
data,
replay,
<<"data_integrity"/utf8>>,
[<<"audit.data.replay.timeline"/utf8>>,
<<"checkpoint.data.replay.selection"/utf8>>,
<<"dashboard.data_pipeline_baseline.snapshot"/utf8>>],
<<"m40-data-replay-001"/utf8>>},
{drill_scenario,
<<"etl_recovery_drill"/utf8>>,
etl,
recover,
<<"etl_reliability"/utf8>>,
[<<"audit.etl.recovery.timeline"/utf8>>,
<<"slo.etl.budget.after_mitigation"/utf8>>,
<<"dashboard.etl_reliability_baseline.snapshot"/utf8>>],
<<"m40-etl-recovery-001"/utf8>>}].
-file("src/lightspeed/ops/operations_kit.gleam", 654).
-spec has_reversible_step(list(step())) -> boolean().
has_reversible_step(Steps) ->
case Steps of
[] ->
false;
[Step | Rest] ->
erlang:element(5, Step) orelse has_reversible_step(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 643).
-spec steps_valid(list(step())) -> boolean().
steps_valid(Steps) ->
case Steps of
[] ->
true;
[Step | Rest] ->
(((erlang:element(2, Step) /= <<""/utf8>>) andalso (erlang:element(
3,
Step
)
/= <<""/utf8>>))
andalso (erlang:element(4, Step) /= <<""/utf8>>))
andalso steps_valid(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 349).
?DOC(" Validate one runbook contract.\n").
-spec runbook_valid(runbook()) -> boolean().
runbook_valid(Runbook) ->
((((erlang:element(3, Runbook) /= <<""/utf8>>) andalso (erlang:element(
4,
Runbook
)
/= <<""/utf8>>))
andalso (erlang:length(erlang:element(5, Runbook)) >= 4))
andalso steps_valid(erlang:element(5, Runbook)))
andalso has_reversible_step(erlang:element(5, Runbook)).
-file("src/lightspeed/ops/operations_kit.gleam", 668).
-spec all_runbooks_valid(list(runbook())) -> boolean().
all_runbooks_valid(Runbooks) ->
case Runbooks of
[] ->
true;
[Runbook | Rest] ->
runbook_valid(Runbook) andalso all_runbooks_valid(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 661).
-spec has_domain(list(runbook()), domain()) -> boolean().
has_domain(Runbooks, Domain) ->
case Runbooks of
[] ->
false;
[Runbook | Rest] ->
(erlang:element(2, Runbook) =:= Domain) orelse has_domain(
Rest,
Domain
)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 358).
?DOC(" Validate M40 runbook-domain coverage.\n").
-spec runbooks_cover_domains() -> boolean().
runbooks_cover_domains() ->
Runbooks = canonical_runbooks(),
(((has_domain(Runbooks, runtime) andalso has_domain(Runbooks, transport))
andalso has_domain(Runbooks, data))
andalso has_domain(Runbooks, etl))
andalso all_runbooks_valid(Runbooks).
-file("src/lightspeed/ops/operations_kit.gleam", 832).
-spec string_entries_non_empty(list(binary())) -> boolean().
string_entries_non_empty(Values) ->
case Values of
[] ->
true;
[Value | Rest] ->
(Value /= <<""/utf8>>) andalso string_entries_non_empty(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 683).
-spec workflow_plan_valid(workflow_plan()) -> boolean().
workflow_plan_valid(Plan) ->
((((((erlang:element(3, Plan) andalso erlang:element(4, Plan)) andalso (erlang:length(
erlang:element(5, Plan)
)
>= 3))
andalso (erlang:length(erlang:element(6, Plan)) >= 3))
andalso (erlang:length(erlang:element(7, Plan)) >= 3))
andalso string_entries_non_empty(erlang:element(5, Plan)))
andalso string_entries_non_empty(erlang:element(6, Plan)))
andalso string_entries_non_empty(erlang:element(7, Plan)).
-file("src/lightspeed/ops/operations_kit.gleam", 675).
-spec all_workflow_plans_valid(list(workflow_plan())) -> boolean().
all_workflow_plans_valid(Plans) ->
case Plans of
[] ->
true;
[Plan | Rest] ->
workflow_plan_valid(Plan) andalso all_workflow_plans_valid(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 368).
?DOC(" Validate operator-safe workflow contracts.\n").
-spec workflow_contracts_safe() -> boolean().
workflow_contracts_safe() ->
_pipe = workflow_plans(),
all_workflow_plans_valid(_pipe).
-file("src/lightspeed/ops/operations_kit.gleam", 739).
-spec has_runbook(list(runbook()), binary()) -> boolean().
has_runbook(Runbooks, Name) ->
case Runbooks of
[] ->
false;
[Runbook | Rest] ->
(erlang:element(3, Runbook) =:= Name) orelse has_runbook(Rest, Name)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 734).
-spec known_runbook(binary()) -> boolean().
known_runbook(Name) ->
_pipe = canonical_runbooks(),
has_runbook(_pipe, Name).
-file("src/lightspeed/ops/operations_kit.gleam", 730).
-spec standard_window(binary()) -> boolean().
standard_window(Window) ->
((Window =:= <<"5m"/utf8>>) orelse (Window =:= <<"10m"/utf8>>)) orelse (Window
=:= <<"15m"/utf8>>).
-file("src/lightspeed/ops/operations_kit.gleam", 825).
-spec has_string(list(binary()), binary()) -> boolean().
has_string(Values, Target) ->
case Values of
[] ->
false;
[Value | Rest] ->
(Value =:= Target) orelse has_string(Rest, Target)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 718).
-spec alert_valid(alert_contract(), list(binary())) -> boolean().
alert_valid(Alert, Metrics) ->
((((((((erlang:element(2, Alert) /= <<""/utf8>>) andalso (erlang:element(
3,
Alert
)
/= <<""/utf8>>))
andalso (erlang:element(4, Alert) /= <<""/utf8>>))
andalso (erlang:element(5, Alert) /= <<""/utf8>>))
andalso (erlang:element(6, Alert) /= <<""/utf8>>))
andalso has_string(Metrics, erlang:element(2, Alert)))
andalso ((erlang:element(5, Alert) =:= <<"page"/utf8>>) orelse (erlang:element(
5,
Alert
)
=:= <<"ticket"/utf8>>)))
andalso standard_window(erlang:element(4, Alert)))
andalso known_runbook(erlang:element(6, Alert)).
-file("src/lightspeed/ops/operations_kit.gleam", 710).
-spec alerts_valid(list(alert_contract()), list(binary())) -> boolean().
alerts_valid(Alerts, Metrics) ->
case Alerts of
[] ->
true;
[Alert | Rest] ->
alert_valid(Alert, Metrics) andalso alerts_valid(Rest, Metrics)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 702).
-spec dashboard_valid(dashboard()) -> boolean().
dashboard_valid(Contract) ->
((((erlang:element(2, Contract) /= <<""/utf8>>) andalso (erlang:length(
erlang:element(3, Contract)
)
>= 4))
andalso (erlang:length(erlang:element(4, Contract)) >= 2))
andalso string_entries_non_empty(erlang:element(3, Contract)))
andalso alerts_valid(
erlang:element(4, Contract),
erlang:element(3, Contract)
).
-file("src/lightspeed/ops/operations_kit.gleam", 694).
-spec all_dashboards_valid(list(dashboard())) -> boolean().
all_dashboards_valid(Contracts) ->
case Contracts of
[] ->
true;
[Contract | Rest] ->
dashboard_valid(Contract) andalso all_dashboards_valid(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 374).
?DOC(" Validate dashboard + alert contracts.\n").
-spec dashboards_cover_alert_contracts() -> boolean().
dashboards_cover_alert_contracts() ->
Contracts = dashboards(),
(erlang:length(Contracts) >= 3) andalso all_dashboards_valid(Contracts).
-file("src/lightspeed/ops/operations_kit.gleam", 814).
-spec unique_strings_loop(list(binary()), list(binary())) -> boolean().
unique_strings_loop(Values, Seen) ->
case Values of
[] ->
true;
[Value | Rest] ->
case has_string(Seen, Value) of
true ->
false;
false ->
unique_strings_loop(Rest, [Value | Seen])
end
end.
-file("src/lightspeed/ops/operations_kit.gleam", 810).
-spec unique_strings(list(binary())) -> boolean().
unique_strings(Values) ->
unique_strings_loop(Values, []).
-file("src/lightspeed/ops/operations_kit.gleam", 800).
-spec collect_drill_seeds(list(drill_scenario()), list(binary())) -> list(binary()).
collect_drill_seeds(Drills, Acc) ->
case Drills of
[] ->
lists:reverse(Acc);
[Drill | Rest] ->
collect_drill_seeds(Rest, [erlang:element(7, Drill) | Acc])
end.
-file("src/lightspeed/ops/operations_kit.gleam", 784).
-spec unique_drill_seeds(list(drill_scenario())) -> boolean().
unique_drill_seeds(Drills) ->
_pipe = Drills,
_pipe@1 = collect_drill_seeds(_pipe, []),
unique_strings(_pipe@1).
-file("src/lightspeed/ops/operations_kit.gleam", 790).
-spec collect_drill_names(list(drill_scenario()), list(binary())) -> list(binary()).
collect_drill_names(Drills, Acc) ->
case Drills of
[] ->
lists:reverse(Acc);
[Drill | Rest] ->
collect_drill_names(Rest, [erlang:element(2, Drill) | Acc])
end.
-file("src/lightspeed/ops/operations_kit.gleam", 778).
-spec unique_drill_names(list(drill_scenario())) -> boolean().
unique_drill_names(Drills) ->
_pipe = Drills,
_pipe@1 = collect_drill_names(_pipe, []),
unique_strings(_pipe@1).
-file("src/lightspeed/ops/operations_kit.gleam", 768).
-spec has_workflow(list(workflow_action()), workflow_action()) -> boolean().
has_workflow(Workflows, Action) ->
case Workflows of
[] ->
false;
[Workflow | Rest] ->
(Workflow =:= Action) orelse has_workflow(Rest, Action)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 763).
-spec required_workflow(workflow_action()) -> boolean().
required_workflow(Action) ->
_pipe = required_workflows(),
has_workflow(_pipe, Action).
-file("src/lightspeed/ops/operations_kit.gleam", 753).
-spec drill_valid(drill_scenario()) -> boolean().
drill_valid(Drill) ->
((((((erlang:element(2, Drill) /= <<""/utf8>>) andalso (erlang:element(
5,
Drill
)
/= <<""/utf8>>))
andalso (erlang:element(7, Drill) /= <<""/utf8>>))
andalso (erlang:length(erlang:element(6, Drill)) >= 3))
andalso string_entries_non_empty(erlang:element(6, Drill)))
andalso known_runbook(erlang:element(5, Drill)))
andalso required_workflow(erlang:element(4, Drill)).
-file("src/lightspeed/ops/operations_kit.gleam", 746).
-spec all_drills_valid(list(drill_scenario())) -> boolean().
all_drills_valid(Drills) ->
case Drills of
[] ->
true;
[Drill | Rest] ->
drill_valid(Drill) andalso all_drills_valid(Rest)
end.
-file("src/lightspeed/ops/operations_kit.gleam", 380).
?DOC(" Validate deterministic and reproducible drill contracts.\n").
-spec drills_reproducible() -> boolean().
drills_reproducible() ->
Drills = drill_scenarios(),
(((erlang:length(Drills) >= 4) andalso all_drills_valid(Drills)) andalso unique_drill_names(
Drills
))
andalso unique_drill_seeds(Drills).
-file("src/lightspeed/ops/operations_kit.gleam", 389).
?DOC(" Full M40 readiness guard.\n").
-spec operations_kit_ready() -> boolean().
operations_kit_ready() ->
((runbooks_cover_domains() andalso workflow_contracts_safe()) andalso dashboards_cover_alert_contracts(
))
andalso drills_reproducible().
-file("src/lightspeed/ops/operations_kit.gleam", 397).
?DOC(" Domain label.\n").
-spec domain_label(domain()) -> binary().
domain_label(Domain) ->
case Domain of
runtime ->
<<"runtime"/utf8>>;
transport ->
<<"transport"/utf8>>;
data ->
<<"data"/utf8>>;
etl ->
<<"etl"/utf8>>
end.
-file("src/lightspeed/ops/operations_kit.gleam", 407).
?DOC(" Workflow label.\n").
-spec workflow_label(workflow_action()) -> binary().
workflow_label(Action) ->
case Action of
rollout ->
<<"rollout"/utf8>>;
rollback ->
<<"rollback"/utf8>>;
drain ->
<<"drain"/utf8>>;
replay ->
<<"replay"/utf8>>;
recover ->
<<"recover"/utf8>>
end.
-file("src/lightspeed/ops/operations_kit.gleam", 867).
-spec bool_label(boolean()) -> binary().
bool_label(Value) ->
case Value of
true ->
<<"true"/utf8>>;
false ->
<<"false"/utf8>>
end.
-file("src/lightspeed/ops/operations_kit.gleam", 839).
-spec step_signature(step()) -> binary().
step_signature(Step) ->
<<<<<<<<(erlang:element(2, Step))/binary, ":reversible="/utf8>>/binary,
(bool_label(erlang:element(5, Step)))/binary>>/binary,
":evidence="/utf8>>/binary,
(erlang:element(4, Step))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 859).
-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/operations_kit.gleam", 418).
?DOC(" Stable runbook signature.\n").
-spec runbook_signature(runbook()) -> binary().
runbook_signature(Runbook) ->
<<<<<<<<<<<<<<"runbook:"/utf8,
(domain_label(erlang:element(2, Runbook)))/binary>>/binary,
":"/utf8>>/binary,
(erlang:element(3, Runbook))/binary>>/binary,
"|trigger="/utf8>>/binary,
(erlang:element(4, Runbook))/binary>>/binary,
"|steps="/utf8>>/binary,
(join_with(
<<";"/utf8>>,
gleam@list:map(erlang:element(5, Runbook), fun step_signature/1)
))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 430).
?DOC(" Stable workflow-plan signature.\n").
-spec workflow_plan_signature(workflow_plan()) -> binary().
workflow_plan_signature(Plan) ->
<<<<<<<<<<<<<<<<<<<<<<"workflow:"/utf8,
(workflow_label(
erlang:element(2, Plan)
))/binary>>/binary,
"|dual_control="/utf8>>/binary,
(bool_label(erlang:element(3, Plan)))/binary>>/binary,
"|reversible="/utf8>>/binary,
(bool_label(erlang:element(4, Plan)))/binary>>/binary,
"|preflight="/utf8>>/binary,
(join_with(<<","/utf8>>, erlang:element(5, Plan)))/binary>>/binary,
"|audit="/utf8>>/binary,
(join_with(<<","/utf8>>, erlang:element(6, Plan)))/binary>>/binary,
"|post="/utf8>>/binary,
(join_with(<<","/utf8>>, erlang:element(7, Plan)))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 847).
-spec alert_signature(alert_contract()) -> binary().
alert_signature(Alert) ->
<<<<<<<<<<<<<<<<(erlang:element(2, Alert))/binary, ":threshold="/utf8>>/binary,
(erlang:element(3, Alert))/binary>>/binary,
":window="/utf8>>/binary,
(erlang:element(4, Alert))/binary>>/binary,
":severity="/utf8>>/binary,
(erlang:element(5, Alert))/binary>>/binary,
":runbook="/utf8>>/binary,
(erlang:element(6, Alert))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 446).
?DOC(" Stable dashboard signature.\n").
-spec dashboard_signature(dashboard()) -> binary().
dashboard_signature(Dashboard) ->
<<<<<<<<<<"dashboard:"/utf8, (erlang:element(2, Dashboard))/binary>>/binary,
"|metrics="/utf8>>/binary,
(join_with(<<","/utf8>>, erlang:element(3, Dashboard)))/binary>>/binary,
"|alerts="/utf8>>/binary,
(join_with(
<<";"/utf8>>,
gleam@list:map(erlang:element(4, Dashboard), fun alert_signature/1)
))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 456).
?DOC(" Stable drill signature.\n").
-spec drill_signature(drill_scenario()) -> binary().
drill_signature(Drill) ->
<<<<<<<<<<<<<<<<<<<<<<"drill:"/utf8, (erlang:element(2, Drill))/binary>>/binary,
"|domain="/utf8>>/binary,
(domain_label(erlang:element(3, Drill)))/binary>>/binary,
"|workflow="/utf8>>/binary,
(workflow_label(erlang:element(4, Drill)))/binary>>/binary,
"|runbook="/utf8>>/binary,
(erlang:element(5, Drill))/binary>>/binary,
"|seed="/utf8>>/binary,
(erlang:element(7, Drill))/binary>>/binary,
"|evidence="/utf8>>/binary,
(join_with(<<","/utf8>>, erlang:element(6, Drill)))/binary>>.
-file("src/lightspeed/ops/operations_kit.gleam", 472).
?DOC(" Stable full-kit signature for deterministic M40 fixtures.\n").
-spec operations_kit_signature() -> binary().
operations_kit_signature() ->
<<<<<<<<<<<<<<"runbooks="/utf8,
(join_with(
<<";"/utf8>>,
gleam@list:map(
canonical_runbooks(),
fun runbook_signature/1
)
))/binary>>/binary,
"|workflows="/utf8>>/binary,
(join_with(
<<";"/utf8>>,
gleam@list:map(
workflow_plans(),
fun workflow_plan_signature/1
)
))/binary>>/binary,
"|dashboards="/utf8>>/binary,
(join_with(
<<";"/utf8>>,
gleam@list:map(dashboards(), fun dashboard_signature/1)
))/binary>>/binary,
"|drills="/utf8>>/binary,
(join_with(
<<";"/utf8>>,
gleam@list:map(drill_scenarios(), fun drill_signature/1)
))/binary>>.