drupflare/drangler - v0.1.0
    Preparing search index...

    Interface ProbeResult

    interface ProbeResult {
        cfw: Record<string, string>;
        diagnostics: "off" | "gated" | "open";
        drupalCache: string | null;
        drupalDynamicCache: string | null;
        edgeTier: string | null;
        generation: number | null;
        generator: string | null;
        headerVersion: number | null;
        kind: SiteKind;
        notes: string[];
        phpBooted: boolean | null;
        plan: string | null;
        queueDepth: number | null;
        renderMs: number | null;
        requested: string;
        serveMs: number | null;
        status: number | null;
        target: string;
        tier: string | null;
        verdict: Verdict;
        wallMs: number;
        workerMs: number | null;
    }
    Index
    cfw: Record<string, string>

    every x-cfw-* header verbatim, because those headers ARE the measurement

    diagnostics: "off" | "gated" | "open"

    'off' when not asked for, 'gated' on a 404, 'open' when the route answered

    drupalCache: string | null

    whichever Drupal cache headers a plain host sets, when probing a VPS

    drupalDynamicCache: string | null
    edgeTier: string | null
    generation: number | null
    generator: string | null
    headerVersion: number | null

    x-cfw-v, the header contract version.

    Bumped by the worker only on a RENAME or a REMOVAL, never on an addition, so a version this probe does not know about means a header it reads by name may have moved. Null means a worker old enough to predate the marker, which is a different thing from a renamed contract.

    kind: SiteKind
    notes: string[]
    phpBooted: boolean | null
    plan: string | null

    x-cfw-plan, which the object sets on a MISS; null when the response came from a cache tier

    queueDepth: number | null
    renderMs: number | null
    requested: string
    serveMs: number | null
    status: number | null
    target: string
    tier: string | null
    verdict: Verdict
    wallMs: number

    WALL CLOCK around the fetch, never cpuTime; RULE 0 forbids reading this as a CPU figure

    workerMs: number | null