gatelineAPI reference
interface RunSummary {
    aheadOfOrigin: null | number;
    behindOrigin: null | number;
    budget: { limit: null | number; spent: null | number };
    closure:
        | null
        | {
            as: "already-delivered"
            | "superseded"
            | "obsolete"
            | "abandoned";
            at: null | string;
            by: null | string;
            reason: null | string;
            [key: string]: unknown;
        };
    escalationsOpen: number;
    gates: Record<"G0" | "G1" | "G2" | "G3", GateLedgerCell>;
    kind: "default" | "branch" | "remote";
    malformed: null | string;
    needsHuman: number;
    pausedReason: null | string;
    phase: string;
    profile: "patch" | "standard" | "full";
    ref: string;
    slug: string;
    source: string;
    tasks: { done: number; maxRounds: number; roundCap: number; total: number };
    updatedAt: null | number;
}

Properties

aheadOfOrigin: null | number

Commits on the run branch origin lacks (#149) — unpushed writes the viewer sees but origin consumers do not. Null when not knowable (no origin tracking, remote-kind run).

behindOrigin: null | number

Commits origin has that the local branch lacks (#99); with aheadOfOrigin > 0 the branch has diverged.

budget: { limit: null | number; spent: null | number }
closure:
    | null
    | {
        as: "already-delivered"
        | "superseded"
        | "obsolete"
        | "abandoned";
        at: null | string;
        by: null | string;
        reason: null | string;
        [key: string]: unknown;
    }

Why the run was closed (#200), when it was. Carried on the summary rather than looked up per surface: every layer that renders phase: closed needs the disposition in the same breath, since "closed" alone is the untyped state the phase exists to avoid.

escalationsOpen: number
gates: Record<"G0" | "G1" | "G2" | "G3", GateLedgerCell>
kind: "default" | "branch" | "remote"
malformed: null | string
needsHuman: number
pausedReason: null | string
phase: string
profile: "patch" | "standard" | "full"

Run profile (DESIGN.md §4.1); display layers filter the gate ledger through PROFILE_GATES.

ref: string
slug: string
source: string
tasks: { done: number; maxRounds: number; roundCap: number; total: number }

maxRounds is the highest review_rounds any task has reached — an observation. roundCap is the rule it is judged against (record ROUND_CAP). They ride together so a surface can draw n/cap without retyping the cap, and so the label never calls the observation a limit (#314).

updatedAt: null | number

Epoch seconds of the last commit touching the run directory.