Classify whether a release should ship, stay limited, or hold.

rollout guard A rollout guard combines pending work and budget headroom into a deterministic release label.

Rollout Guard Reliability Report

pending_migrations
rollout_guard.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $pending_migrations = 1;
my $error_budget = 8;
my $rollout_status = "hold";

if ($pending_migrations == 0 && $error_budget >= 8) {
    $rollout_status = "ship";
} elsif ($pending_migrations <= 1 && $error_budget >= 6) {
    $rollout_status = "limit";
}

print "pending=$pending_migrations budget=$error_budget status=$rollout_status\n";
use strict;
use warnings;

my $pending_migrations = 0;
my $error_budget = 8;
my $rollout_status = "hold";

if ($pending_migrations == 0 && $error_budget >= 8) {
    $rollout_status = "ship";
} elsif ($pending_migrations <= 1 && $error_budget >= 6) {
    $rollout_status = "limit";
}

print "pending=$pending_migrations budget=$error_budget status=$rollout_status\n";
use strict;
use warnings;

my $pending_migrations = 3;
my $error_budget = 8;
my $rollout_status = "hold";

if ($pending_migrations == 0 && $error_budget >= 8) {
    $rollout_status = "ship";
} elsif ($pending_migrations <= 1 && $error_budget >= 6) {
    $rollout_status = "limit";
}

print "pending=$pending_migrations budget=$error_budget status=$rollout_status\n";
  1. $pending_migrations ← 1, $error_budget ← 8, $rollout_status ← hold

    4my $pending_migrations→ 1 = 1; #@pending_migrations=0, 35my $error_budget→ 8 = 8;6my $rollout_status→ hold = "hold";
  2. $rollout_status ← limit

    9    $rollout_status = "ship";10} elsif ($pending_migrations1 <= 1 && $error_budget8 >= 6) {11    $rollout_status→ limit = "limit";12}
  3. print "pending=$pending_migrations budget=$error_budget status=$rollou…

    14print "pending=$pending_migrations1 budget=$error_budget8 status=$rollout_statuslimit\n";
    outputpending=1 budget=8 status=limit
  1. $pending_migrations ← 0, $error_budget ← 8, $rollout_status ← hold

    4my $pending_migrations→ 0 = 0;5my $error_budget→ 8 = 8;6my $rollout_status→ hold = "hold";
  2. $rollout_status ← ship

    8if ($pending_migrations0 == 0 && $error_budget8 >= 8) {9    $rollout_status→ ship = "ship";10} elsif ($pending_migrations <= 1 && $error_budget >= 6) {
  3. print "pending=$pending_migrations budget=$error_budget status=$rollou…

    14print "pending=$pending_migrations0 budget=$error_budget8 status=$rollout_statusship\n";
    outputpending=0 budget=8 status=ship
  1. $pending_migrations ← 3, $error_budget ← 8, $rollout_status ← hold

    4my $pending_migrations→ 3 = 3;5my $error_budget→ 8 = 8;6my $rollout_status→ hold = "hold";78if ($pending_migrations == 0 && $error_budget >= 8) {9    $rollout_status = "ship";10} elsif ($pending_migrations <= 1 && $error_budget >= 6) {11    $rollout_status = "limit";12}1314print "pending=$pending_migrations3 budget=$error_budget8 status=$rollout_statushold\n";
    outputpending=3 budget=8 status=hold