Use rollout checks to choose a ship, limit, or hold label.

Rollout Guard Reliability Report

RolloutGuardReliabilityReport.scala
object Main {
  def main(args: Array[String]): Unit = {
    val pendingChecks = 
    val errorBudget = 8
    var status = "ship"

    if (pendingChecks > 0) {
      status = "limit"
    }
    if (pendingChecks >= 3 || errorBudget < 5) {
      status = "hold"
    }

    println("pending=" + pendingChecks)
    println("budget=" + errorBudget)
    println("status=" + status)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val pendingChecks = 
    val errorBudget = 8
    var status = "ship"

    if (pendingChecks > 0) {
      status = "limit"
    }
    if (pendingChecks >= 3 || errorBudget < 5) {
      status = "hold"
    }

    println("pending=" + pendingChecks)
    println("budget=" + errorBudget)
    println("status=" + status)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val pendingChecks = 
    val errorBudget = 8
    var status = "ship"

    if (pendingChecks > 0) {
      status = "limit"
    }
    if (pendingChecks >= 3 || errorBudget < 5) {
      status = "hold"
    }

    println("pending=" + pendingChecks)
    println("budget=" + errorBudget)
    println("status=" + status)
  }
}
rollout-guard-report Release gates are easiest to audit when each guard writes a compact status.