@cfxlabsinc/b2b-services
    Preparing search index...

    Type Alias ProgramDeployProgress

    What the run page polls. The workflow owns this and serves it from a query handler, so it reports the deploy's own phases rather than the workflow's activity list — the surface is not a Temporal reskin (§4.5).

    type ProgramDeployProgress = {
        bufferAddress: string | null;
        bufferRentLamports: string | null;
        chunksTotal: number;
        chunksWritten: number;
        expectedHash: string;
        failure: { message: string; phase: ProgramDeployPhase } | null;
        idlFailure: string | null;
        network: ProgramNetwork;
        phase: ProgramDeployPhase;
        program: ProgramName;
        reclaimedLamports: string | null;
        releaseTag: string;
        upgradeSignature: string | null;
        verifiedHash: string | null;
    }
    Index
    bufferAddress: string | null

    Null until the buffer exists; kept after failure so it can be reclaimed.

    bufferRentLamports: string | null
    chunksTotal: number
    chunksWritten: number

    Counts, never a percentage. 903 / 903 is a fact the workflow has; a progress bar would be that same fact with information removed (§4.4).

    expectedHash: string

    The hash the artifact must have, and did have, on chain.

    failure: { message: string; phase: ProgramDeployPhase } | null

    Names the phase it failed in and carries the real error text, per Surface-The-Real-Error. bufferAddress above stays populated so the page can offer an inline reclaim.

    idlFailure: string | null

    Why the IDL was not published, when the bytecode upgrade already landed.

    Not a failure of the deploy: the program is upgraded and running, and the IDL is separately republishable from the register's IDL section. Failing the whole run here would report a deploy that did not happen and invite a redeploy that spends rent to fix a document. Null on both the success path and every path that never reached the IDL step.

    program: ProgramName
    reclaimedLamports: string | null

    Set once the buffer's rent is back with the payer.

    releaseTag: string
    upgradeSignature: string | null
    verifiedHash: string | null