Classify a rollout guard as ship, limit, or hold from deterministic readiness inputs.

rollout guard Rollout readiness can be modeled as scalar checks before any live deployment system sees it.

Rollout Guard Reliability Report

pendingMigrations
rollout_guard.ts
Replay: real traced execution (multi-file project)
type RolloutReport = {
    pendingMigrations: number;
    errorBudget: number;
    status: string;
};

const pendingMigrations: number = 1;
const errorBudget: number = 8;
let reportStatus: string = "hold";

if (pendingMigrations === 0 && errorBudget >= 8) {
    reportStatus = "ship";
} else if (pendingMigrations <= 1 && errorBudget >= 6) {
    reportStatus = "limit";
}

const report: RolloutReport = { pendingMigrations, errorBudget, status: reportStatus };
console.log(`pending=${report.pendingMigrations} budget=${report.errorBudget} status=${report.status}`);
type RolloutReport = {
    pendingMigrations: number;
    errorBudget: number;
    status: string;
};

const pendingMigrations: number = 0;
const errorBudget: number = 8;
let reportStatus: string = "hold";

if (pendingMigrations === 0 && errorBudget >= 8) {
    reportStatus = "ship";
} else if (pendingMigrations <= 1 && errorBudget >= 6) {
    reportStatus = "limit";
}

const report: RolloutReport = { pendingMigrations, errorBudget, status: reportStatus };
console.log(`pending=${report.pendingMigrations} budget=${report.errorBudget} status=${report.status}`);
type RolloutReport = {
    pendingMigrations: number;
    errorBudget: number;
    status: string;
};

const pendingMigrations: number = 3;
const errorBudget: number = 8;
let reportStatus: string = "hold";

if (pendingMigrations === 0 && errorBudget >= 8) {
    reportStatus = "ship";
} else if (pendingMigrations <= 1 && errorBudget >= 6) {
    reportStatus = "limit";
}

const report: RolloutReport = { pendingMigrations, errorBudget, status: reportStatus };
console.log(`pending=${report.pendingMigrations} budget=${report.errorBudget} status=${report.status}`);
  1. pendingMigrations ← 1, errorBudget ← 8, reportStatus ← hold

    4    status: string;5};67const pendingMigrations→ 1: number = 1;  //@pendingMigrations=0, 38const errorBudget→ 8: number = 8;9let reportStatus→ hold: string = "hold";
  2. if (pendingMigrations <= 1 && errorBudget >= 6)

    12    reportStatus = "ship";13} else if (pendingMigrations1 <= 1 && errorBudget8 >= 6) {14    reportStatus = "limit";15}
  3. report ← [object Object]

    14    reportStatus = "limit";15}1617const report→ [object Object]: RolloutReport = { pendingMigrations, errorBudget, status: reportStatuslimit };18console.log(`pending=${report.pendingMigrations1} budget=${report.errorBudget8} status=${report.statuslimit}`);
    outputpending=1 budget=8 status=limit
  1. pendingMigrations ← 0, errorBudget ← 8, reportStatus ← hold

    4    status: string;5};67const pendingMigrations→ 0: number = 0;8const errorBudget→ 8: number = 8;9let reportStatus→ hold: string = "hold";
  2. if (pendingMigrations === 0 && errorBudget >= 8)

    8const errorBudget: number = 8;9let reportStatus: string = "hold";1011if (pendingMigrations0 === 0 && errorBudget8 >= 8) {12    reportStatus = "ship";13} else if (pendingMigrations <= 1 && errorBudget >= 6) {
  3. report ← [object Object]

    14    reportStatus = "limit";15}1617const report→ [object Object]: RolloutReport = { pendingMigrations, errorBudget, status: reportStatusship };18console.log(`pending=${report.pendingMigrations0} budget=${report.errorBudget8} status=${report.statusship}`);
    outputpending=0 budget=8 status=ship
  1. pendingMigrations ← 3, errorBudget ← 8, reportStatus ← hold, report ← [object Object]

    4    status: string;5};67const pendingMigrations→ 3: number = 3;8const errorBudget→ 8: number = 8;9let reportStatus→ hold: string = "hold";1011if (pendingMigrations === 0 && errorBudget >= 8) {12    reportStatus = "ship";13} else if (pendingMigrations <= 1 && errorBudget >= 6) {14    reportStatus = "limit";15}1617const report→ [object Object]: RolloutReport = { pendingMigrations, errorBudget, status: reportStatushold };18console.log(`pending=${report.pendingMigrations3} budget=${report.errorBudget8} status=${report.statushold}`);
    outputpending=3 budget=8 status=hold