Decide whether a rollout can ship based on pending safety checks.

rollout guard A rollout guard turns pending safety checks into a release status before a deployment proceeds.

Rollout Guard Reliability Report

pendingChecks
RolloutGuardReliabilityReport.cs
Replay: real traced execution (multi-file project)
using System;

class Program
{
    static string GuardStatus(int pendingChecks)
    {
        if (pendingChecks >= 3)
        {
            return "hold";
        }

        if (pendingChecks > 0)
        {
            return "limit";
        }

        return "ship";
    }

    static void Main()
    {
        int pendingChecks = 1;
        int rolloutBudget = 8;
        string status = GuardStatus(pendingChecks);

        Console.WriteLine("pending=" + pendingChecks);
        Console.WriteLine("budget=" + rolloutBudget);
        Console.WriteLine("status=" + status);
    }
}
using System;

class Program
{
    static string GuardStatus(int pendingChecks)
    {
        if (pendingChecks >= 3)
        {
            return "hold";
        }

        if (pendingChecks > 0)
        {
            return "limit";
        }

        return "ship";
    }

    static void Main()
    {
        int pendingChecks = 0;
        int rolloutBudget = 8;
        string status = GuardStatus(pendingChecks);

        Console.WriteLine("pending=" + pendingChecks);
        Console.WriteLine("budget=" + rolloutBudget);
        Console.WriteLine("status=" + status);
    }
}
using System;

class Program
{
    static string GuardStatus(int pendingChecks)
    {
        if (pendingChecks >= 3)
        {
            return "hold";
        }

        if (pendingChecks > 0)
        {
            return "limit";
        }

        return "ship";
    }

    static void Main()
    {
        int pendingChecks = 3;
        int rolloutBudget = 8;
        string status = GuardStatus(pendingChecks);

        Console.WriteLine("pending=" + pendingChecks);
        Console.WriteLine("budget=" + rolloutBudget);
        Console.WriteLine("status=" + status);
    }
}
  1. pendingChecks ← 1, rolloutBudget ← 8

    20static void Main()21{22    int pendingChecks→ 1 = 1; //@pendingChecks=0, 323    int rolloutBudget→ 8 = 8;24    string status = GuardStatus(pendingChecks1);
  2. static string GuardStatus(int pendingChecks)

    4{5    static string GuardStatus(int pendingChecks1)6    {7        if (pendingChecks >= 3)
  3. if (pendingChecks > 0)

    12if (pendingChecks1 > 0)13{14    return "limit";15}
  4. status ← limit

    23    int rolloutBudget = 8;24    string status→ limit = GuardStatus(pendingChecks1);2526    Console.WriteLine("pending=" + pendingChecks1);27    Console.WriteLine("budget=" + rolloutBudget8);28    Console.WriteLine("status=" + statuslimit);29}
    outputpending=1
    budget=8
    status=limit
  1. pendingChecks ← 0, rolloutBudget ← 8

    20static void Main()21{22    int pendingChecks→ 0 = 0;23    int rolloutBudget→ 8 = 8;24    string status = GuardStatus(pendingChecks0);
  2. static string GuardStatus(int pendingChecks)

    4{5    static string GuardStatus(int pendingChecks0)6    {7        if (pendingChecks >= 3)8        {9            return "hold";10        }1112        if (pendingChecks > 0)13        {14            return "limit";15        }1617        return "ship";18    }
  3. status ← ship

    23    int rolloutBudget = 8;24    string status→ ship = GuardStatus(pendingChecks0);2526    Console.WriteLine("pending=" + pendingChecks0);27    Console.WriteLine("budget=" + rolloutBudget8);28    Console.WriteLine("status=" + statusship);29}
    outputpending=0
    budget=8
    status=ship
  1. pendingChecks ← 3, rolloutBudget ← 8

    20static void Main()21{22    int pendingChecks→ 3 = 3;23    int rolloutBudget→ 8 = 8;24    string status = GuardStatus(pendingChecks3);
  2. static string GuardStatus(int pendingChecks)

    4{5    static string GuardStatus(int pendingChecks3)6    {7        if (pendingChecks >= 3)
  3. if (pendingChecks >= 3)

    6{7    if (pendingChecks3 >= 3)8    {9        return "hold";10    }
  4. status ← hold

    23    int rolloutBudget = 8;24    string status→ hold = GuardStatus(pendingChecks3);2526    Console.WriteLine("pending=" + pendingChecks3);27    Console.WriteLine("budget=" + rolloutBudget8);28    Console.WriteLine("status=" + statushold);29}
    outputpending=3
    budget=8
    status=hold