use crate::cx::Cx;
use crate::observability::swarm_pressure_governor::{
FourthWaveGovernorAction, FourthWaveGovernorDecisionReceipt,
};
use crate::types::{
Budget, SloRuntimeAdmissionIssueKind, SloRuntimeAdmissionOutcome, SloRuntimeAdmissionRequest,
SloRuntimeAdmissionStatus, SloRuntimeOptionalWorkDecision, SloRuntimePolicyApplication,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum SloRuntimeWorkKind {
Required,
Optional,
CleanupFinalizer,
ProofReporting,
}
impl SloRuntimeWorkKind {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Required => "required",
Self::Optional => "optional",
Self::CleanupFinalizer => "cleanup_finalizer",
Self::ProofReporting => "proof_reporting",
}
}
#[must_use]
pub const fn uses_optional_work_class(self) -> bool {
matches!(self, Self::Optional)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SloRuntimePolicyBridgeRequest {
pub work_kind: SloRuntimeWorkKind,
pub admission: SloRuntimeAdmissionRequest,
}
impl SloRuntimePolicyBridgeRequest {
#[must_use]
pub const fn new(work_kind: SloRuntimeWorkKind, admission: SloRuntimeAdmissionRequest) -> Self {
Self {
work_kind,
admission,
}
}
#[must_use]
pub const fn required(admission: SloRuntimeAdmissionRequest) -> Self {
Self::new(SloRuntimeWorkKind::Required, admission)
}
#[must_use]
pub const fn optional(admission: SloRuntimeAdmissionRequest) -> Self {
Self::new(SloRuntimeWorkKind::Optional, admission)
}
#[must_use]
pub const fn cleanup_finalizer(admission: SloRuntimeAdmissionRequest) -> Self {
Self::new(SloRuntimeWorkKind::CleanupFinalizer, admission)
}
#[must_use]
pub const fn proof_reporting(admission: SloRuntimeAdmissionRequest) -> Self {
Self::new(SloRuntimeWorkKind::ProofReporting, admission)
}
fn normalized_for_cx<Caps>(&self, cx: &Cx<Caps>) -> SloRuntimeAdmissionRequest {
let mut admission = self.admission.clone();
admission.cancel_requested |= cx.is_cancel_requested();
if !self.work_kind.uses_optional_work_class() {
admission.optional_work_class = None;
}
admission
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SloRuntimePolicyBridgeDecision {
pub work_kind: SloRuntimeWorkKind,
pub outcome: SloRuntimeAdmissionOutcome,
pub runtime_budget: Budget,
pub work_may_start: bool,
pub cx_cancel_observed: bool,
pub explicit_receipt_required: bool,
pub region_close_requires_quiescence: bool,
}
impl SloRuntimePolicyBridgeDecision {
fn from_outcome(
work_kind: SloRuntimeWorkKind,
outcome: SloRuntimeAdmissionOutcome,
cx_cancel_observed: bool,
) -> Self {
let work_may_start = outcome.status == SloRuntimeAdmissionStatus::Admitted;
let runtime_budget = outcome.budget.to_budget();
Self {
work_kind,
outcome,
runtime_budget,
work_may_start,
cx_cancel_observed,
explicit_receipt_required: !work_may_start,
region_close_requires_quiescence: true,
}
}
#[must_use]
pub fn optional_work_browned_out(&self) -> bool {
self.work_kind == SloRuntimeWorkKind::Optional
&& self.outcome.status == SloRuntimeAdmissionStatus::Brownout
}
#[must_use]
pub fn no_win_fallback_selected(&self) -> bool {
self.outcome.status == SloRuntimeAdmissionStatus::NoWin
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FourthWaveRuntimeBridgeDecision {
pub runtime_decision: SloRuntimePolicyBridgeDecision,
pub fourth_wave_decision_id: String,
pub fourth_wave_snapshot_id: String,
pub fourth_wave_rule_id: &'static str,
pub selected_action: FourthWaveGovernorAction,
pub rollback_reason: Option<String>,
pub opt_in_bridge_enabled: bool,
pub delay_required: bool,
pub rollback_to_observe_only: bool,
pub obligation_cleanup_required: bool,
pub receipt_redaction_required: bool,
pub non_claims: Vec<&'static str>,
}
impl FourthWaveRuntimeBridgeDecision {
#[must_use]
pub const fn work_may_start(&self) -> bool {
self.runtime_decision.work_may_start
}
#[must_use]
pub const fn explicit_receipt_required(&self) -> bool {
self.runtime_decision.explicit_receipt_required
}
#[must_use]
pub const fn fail_closed(&self) -> bool {
self.selected_action.fail_closed()
}
#[must_use]
pub fn rollback_required(&self) -> bool {
self.rollback_reason.is_some() || self.rollback_to_observe_only
}
}
#[derive(Debug, Clone, Copy)]
pub struct SloRuntimePolicyBridge<'a> {
application: &'a SloRuntimePolicyApplication,
}
impl<'a> SloRuntimePolicyBridge<'a> {
#[must_use]
pub const fn new(application: &'a SloRuntimePolicyApplication) -> Self {
Self { application }
}
#[must_use]
pub const fn application(&self) -> &'a SloRuntimePolicyApplication {
self.application
}
#[must_use]
pub fn evaluate<Caps>(
&self,
cx: &Cx<Caps>,
request: &SloRuntimePolicyBridgeRequest,
) -> SloRuntimePolicyBridgeDecision {
let cx_cancel_observed = cx.is_cancel_requested();
let admission = request.normalized_for_cx(cx);
let outcome = self.application.evaluate_admission(&admission);
SloRuntimePolicyBridgeDecision::from_outcome(request.work_kind, outcome, cx_cancel_observed)
}
#[must_use]
pub fn evaluate_fourth_wave<Caps>(
&self,
cx: &Cx<Caps>,
request: &SloRuntimePolicyBridgeRequest,
receipt: &FourthWaveGovernorDecisionReceipt,
) -> FourthWaveRuntimeBridgeDecision {
let base = self.evaluate(cx, request);
let (runtime_decision, rollback_reason, delay_required, rollback_to_observe_only) =
if base.cx_cancel_observed {
(
base,
Some("cx-cancelled-before-start".to_string()),
false,
true,
)
} else {
Self::apply_fourth_wave_action(base, request, receipt)
};
FourthWaveRuntimeBridgeDecision {
runtime_decision,
fourth_wave_decision_id: receipt.decision_id.clone(),
fourth_wave_snapshot_id: receipt.snapshot_id.clone(),
fourth_wave_rule_id: receipt.rule_id,
selected_action: receipt.selected_action,
rollback_reason,
opt_in_bridge_enabled: true,
delay_required,
rollback_to_observe_only,
obligation_cleanup_required: true,
receipt_redaction_required: true,
non_claims: fourth_wave_runtime_non_claims(receipt),
}
}
fn apply_fourth_wave_action(
base: SloRuntimePolicyBridgeDecision,
request: &SloRuntimePolicyBridgeRequest,
receipt: &FourthWaveGovernorDecisionReceipt,
) -> (SloRuntimePolicyBridgeDecision, Option<String>, bool, bool) {
match receipt.selected_action {
FourthWaveGovernorAction::AdmitRequiredWork => (base, None, false, false),
FourthWaveGovernorAction::BrownoutOptionalWork
if request.work_kind.uses_optional_work_class() =>
{
let reason = fourth_wave_runtime_reason(receipt)
.unwrap_or_else(|| "fourth-wave optional brownout".to_string());
(force_fourth_wave_brownout(base), Some(reason), false, true)
}
FourthWaveGovernorAction::BrownoutOptionalWork => (base, None, false, false),
FourthWaveGovernorAction::DeferNoRemoteWorker => {
let reason = fourth_wave_runtime_reason(receipt).unwrap_or_else(|| {
"remote-required lane has no admissible remote worker".to_string()
});
(
force_fourth_wave_no_win(base, reason.clone()),
Some(reason),
true,
true,
)
}
FourthWaveGovernorAction::FailClosedAdvisoryOnly
| FourthWaveGovernorAction::FailClosedLocalRchFallback
| FourthWaveGovernorAction::FailClosedMalformedInput
| FourthWaveGovernorAction::FailClosedMissingEvidence
| FourthWaveGovernorAction::FailClosedStaleEvidence => {
let reason = fourth_wave_runtime_reason(receipt)
.unwrap_or_else(|| receipt.selected_action.as_str().to_string());
(
force_fourth_wave_blocked(base, reason.clone()),
Some(reason),
false,
true,
)
}
}
}
}
fn force_fourth_wave_brownout(
mut decision: SloRuntimePolicyBridgeDecision,
) -> SloRuntimePolicyBridgeDecision {
force_fourth_wave_non_start(
&mut decision,
SloRuntimeAdmissionStatus::Brownout,
Some(SloRuntimeOptionalWorkDecision::Brownout),
None,
vec![SloRuntimeAdmissionIssueKind::OptionalWorkBrownout],
);
decision
}
fn force_fourth_wave_no_win(
mut decision: SloRuntimePolicyBridgeDecision,
reason: String,
) -> SloRuntimePolicyBridgeDecision {
force_fourth_wave_non_start(
&mut decision,
SloRuntimeAdmissionStatus::NoWin,
None,
Some(reason),
vec![SloRuntimeAdmissionIssueKind::NoWinFallback],
);
decision
}
fn force_fourth_wave_blocked(
mut decision: SloRuntimePolicyBridgeDecision,
reason: String,
) -> SloRuntimePolicyBridgeDecision {
force_fourth_wave_non_start(
&mut decision,
SloRuntimeAdmissionStatus::Blocked,
None,
Some(reason),
vec![SloRuntimeAdmissionIssueKind::ApplicationInvalid],
);
decision
}
fn force_fourth_wave_non_start(
decision: &mut SloRuntimePolicyBridgeDecision,
status: SloRuntimeAdmissionStatus,
optional_work_decision: Option<SloRuntimeOptionalWorkDecision>,
fallback_reason: Option<String>,
issue_kinds: Vec<SloRuntimeAdmissionIssueKind>,
) {
let total_work_units = decision
.outcome
.admitted_work_units
.saturating_add(decision.outcome.rejected_work_units);
decision.outcome.status = status;
decision.outcome.optional_work_decision = optional_work_decision;
decision.outcome.fallback_reason = fallback_reason;
decision.outcome.admitted_work_units = 0;
decision.outcome.rejected_work_units = total_work_units;
decision.outcome.issue_kinds = issue_kinds;
decision.work_may_start = false;
decision.explicit_receipt_required = true;
decision.region_close_requires_quiescence = true;
}
fn fourth_wave_runtime_reason(receipt: &FourthWaveGovernorDecisionReceipt) -> Option<String> {
let reason = receipt.non_action_reason.trim();
if reason.is_empty() {
None
} else {
Some(redact_secret_like_reason(reason))
}
}
fn redact_secret_like_reason(reason: &str) -> String {
const SECRET_LIKE_REASON_MARKERS: [&str; 6] = [
"authorization",
"bearer",
"password",
"secret",
"token",
"api_key",
];
let lower = reason.to_ascii_lowercase();
if SECRET_LIKE_REASON_MARKERS
.iter()
.any(|marker| lower.contains(*marker))
{
"<redacted>".to_string()
} else {
reason.to_string()
}
}
fn fourth_wave_runtime_non_claims(
receipt: &FourthWaveGovernorDecisionReceipt,
) -> Vec<&'static str> {
let mut non_claims = receipt.non_claims.clone();
for claim in [
"explicit opt-in runtime bridge only",
"not production-on-by-default",
"region close still requires quiescence",
"obligation cleanup still required",
] {
if !non_claims.contains(&claim) {
non_claims.push(claim);
}
}
non_claims
}