Member Junction
    Preparing search index...

    Result of a FetchChanges call, containing a batch of records

    interface FetchBatchResult {
        HasMore: boolean;
        NewWatermarkValue?: string;
        NextAfterKeyValue?: string;
        NextCursor?: string;
        NextOffset?: number;
        NextPage?: number;
        Records: ExternalRecord[];
        SourceTotalRecords?: number;
        Warnings?: FetchWarning[];
    }
    Index

    Properties

    HasMore: boolean

    Whether there are more records to fetch after this batch

    NewWatermarkValue?: string

    Updated watermark value after this batch

    NextAfterKeyValue?: string

    Next keyset/seek position — the highest StableOrderingKey value in this batch — to pass back via FetchContext.AfterKeyValue (plan.md §7 keyset resume).

    NextCursor?: string

    Next cursor to pass back via FetchContext.CurrentCursor on the next call (cursor-based pagination)

    NextOffset?: number

    Next offset to pass back via FetchContext.CurrentOffset on the next call (offset-based pagination)

    NextPage?: number

    Next page number to pass back via FetchContext.CurrentPage on the next call (page-based pagination)

    Records: ExternalRecord[]

    Records retrieved in this batch

    SourceTotalRecords?: number

    MJ-RUN-35 — the total the SOURCE says it holds for this object, when it says so.

    Many APIs state it on every page (Django REST returns {count, next, previous, results}), and it is the cheapest self-check available: comparing it against what a clean fetch actually produced turns a silently incomplete scan into a failed one. Before this it went nowhere — the REST base parsed count into its internal pagination state and had no field to carry it out on, so every connector that read it discarded it and the engine had nothing to check against.

    Absent means "the source did not say", which is NOT the same as zero and must never be compared as if it were.

    Warnings?: FetchWarning[]

    Non-fatal diagnostics from this fetch (e.g. a second-layer object that found zero parents). The engine forwards each to the structured progress artifact as a SyncWarning so the silent-empty case is visible over GraphQL instead of a swallowed console.warn.