Use pending checks and error budget to choose a rollout guard status.

guard status A rollout guard turns operational evidence into a compact ship, limit, or hold label.
pending checks Pending checks are treated separately from error budget so the cause stays visible.

Rollout Guard Reliability Report

pendingChecks
rollout_guard_reliability_report.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int main(void) {
    int pendingChecks = 1;
    int errorBudget = 8;
    const char *status = "ship";

    if (errorBudget < 5) {
        status = "limit";
    }

    if (pendingChecks > 0) {
        status = "limit";
    }

    if (pendingChecks >= 3) {
        status = "hold";
    }

    printf("pending=%d\n", pendingChecks);
    printf("budget=%d\n", errorBudget);
    printf("status=%s\n", status);
    return 0;
}
#include <stdio.h>

int main(void) {
    int pendingChecks = 0;
    int errorBudget = 8;
    const char *status = "ship";

    if (errorBudget < 5) {
        status = "limit";
    }

    if (pendingChecks > 0) {
        status = "limit";
    }

    if (pendingChecks >= 3) {
        status = "hold";
    }

    printf("pending=%d\n", pendingChecks);
    printf("budget=%d\n", errorBudget);
    printf("status=%s\n", status);
    return 0;
}
#include <stdio.h>

int main(void) {
    int pendingChecks = 3;
    int errorBudget = 8;
    const char *status = "ship";

    if (errorBudget < 5) {
        status = "limit";
    }

    if (pendingChecks > 0) {
        status = "limit";
    }

    if (pendingChecks >= 3) {
        status = "hold";
    }

    printf("pending=%d\n", pendingChecks);
    printf("budget=%d\n", errorBudget);
    printf("status=%s\n", status);
    return 0;
}
  1. pendingChecks ← 1, errorBudget ← 8, status ← ship

    3int main(void) {4    int pendingChecks→ 1 = 1; //@pendingChecks=0, 35    int errorBudget→ 8 = 8;6    const char *status→ ship = "ship";
  2. status ← limit

    12if (pendingChecks1 > 0) {13    status→ limit = "limit";14}
  3. printf("pending=%d ", pendingChecks);

    20    printf("pending=%d\n", pendingChecks1);21    printf("budget=%d\n", errorBudget8);22    printf("status=%s\n", statuslimit);23    return 0;24}
    outputpending=1
    budget=8
    status=limit
  1. pendingChecks ← 0, errorBudget ← 8, status ← ship

    3int main(void) {4    int pendingChecks→ 0 = 0;5    int errorBudget→ 8 = 8;6    const char *status→ ship = "ship";78    if (errorBudget < 5) {9        status = "limit";10    }1112    if (pendingChecks > 0) {13        status = "limit";14    }1516    if (pendingChecks >= 3) {17        status = "hold";18    }1920    printf("pending=%d\n", pendingChecks0);21    printf("budget=%d\n", errorBudget8);22    printf("status=%s\n", statusship);23    return 0;24}
    outputpending=0
    budget=8
    status=ship
  1. pendingChecks ← 3, errorBudget ← 8, status ← ship

    3int main(void) {4    int pendingChecks→ 3 = 3;5    int errorBudget→ 8 = 8;6    const char *status→ ship = "ship";
  2. status ← limit

    12if (pendingChecks3 > 0) {13    status→ limit = "limit";14}
  3. status ← hold

    16if (pendingChecks3 >= 3) {17    status→ hold = "hold";18}
  4. printf("pending=%d ", pendingChecks);

    20    printf("pending=%d\n", pendingChecks3);21    printf("budget=%d\n", errorBudget8);22    printf("status=%s\n", statushold);23    return 0;24}
    outputpending=3
    budget=8
    status=hold