/**
 * Cross Dataset Reference (CDR) write shape (D0043).
 *
 * The shape AILF documents use to reference editorial content (article,
 * docPage, …) across the dataset boundary (`ailf-prod-private` →
 * editorial). Sanity's Mutation API requires `_projectId` even when both
 * datasets live in the same project (W0154 spike Finding 13). `_weak: true`
 * keeps the AILF document publishable when the editorial target is retired
 * (Finding 16) and matches the W0155 schema declaration.
 *
 * Canonical builder for this shape. Used by:
 *
 *   - `packages/eval/src/sanity/client.ts:buildEditorialReference()` — the
 *     env-aware runtime wrapper that supplies projectId + dataset from
 *     env, used by the eval pipeline's mirror step (W0156).
 *   - `packages/studio/scripts/migrate-to-private-dataset.ts` — the
 *     one-shot corpus migration script (W0159).
 *
 * Adding a field here is a single edit; both consumers pick it up without
 * drift. That is the load-bearing property — the migration script and the
 * runtime write path must emit byte-identical CDR shapes.
 */
export interface EditorialReference {
    _type: "crossDatasetReference";
    _projectId: string;
    _dataset: string;
    _ref: string;
    _weak?: boolean;
}
export interface MakeEditorialReferenceArgs {
    /** Sanity project ID hosting both source and dest datasets. */
    projectId: string;
    /** The editorial dataset name (e.g. "next"). */
    dataset: string;
    /** The document ID being referenced. */
    refId: string;
    /** Whether the reference is weak. Defaults to true for AILF→editorial. */
    weak?: boolean;
}
/**
 * Construct an editorial Cross Dataset Reference. Pure — no env reads, no
 * side effects. Callers that need env-aware defaults (the eval pipeline)
 * wrap this; callers with explicit config (the migration script) call it
 * directly.
 *
 * @throws if `refId` is empty.
 */
export declare function makeEditorialReference(args: MakeEditorialReferenceArgs): EditorialReference;
