/**
 * Canonical (high-fidelity) documentation document types.
 *
 * This is the **single source of truth** for the set of editorial `_type`s that
 * the AILF eval pipeline renders with a hand-written, high-fidelity renderer and
 * that a Studio author may pin on a task's canonical-doc reference. The list
 * lives in `shared` (the zero-dependency leaf) precisely so both consumers agree
 * on it without one importing the other:
 *
 *   - **eval** (`packages/eval/src/sanity/document-renderers.ts`) keys its
 *     `BUILT_IN_RENDERERS` registry on these types via
 *     `satisfies Record<CanonicalDocType, DocumentRenderer>`, so a missing or
 *     extra renderer is a compile error. The id-ref query (`DOCS_BY_IDS_QUERY`)
 *     derives its per-`_type` projection branches and its `!(_type in [...])`
 *     exclusion list from that registry, so neither can silently drift from this
 *     list (D0085 renderer contract).
 *   - **studio** (`packages/studio/src/lib/constants.ts`) re-exports the list as
 *     its `CANONICAL_DOC_TYPES`; `schema/task.ts` derives the cross-dataset
 *     reference `to:` picker targets from it, and `queries.ts` derives the
 *     release-coverage / doc-search `_type in [...]` filters from
 *     {@link CANONICAL_DOC_TYPES_GROQ}.
 *
 * ## The deliberate split: *pinnable in Studio* vs. *renderable by id ref*
 *
 * These types are the **pinnable** set — the curated handful an author selects
 * from the Studio picker, and the set AILF renders with full fidelity. They are
 * NOT the limit of what AILF can *render*: a repo/YAML task may pin **any**
 * `_type` by `id` ref (W0195), and the eval renderer registry falls back to a
 * generic walker for unregistered types. The narrow Studio allowlist is a
 * deliberate UX choice (per D0038 — Studio is intentionally a subset of the
 * domain), not accidental drift from the renderer set. Widening it means adding
 * a high-fidelity renderer first, then a single entry here.
 *
 * A third list — eval's `NON_EVALUABLE_RELEASE_DOC_TYPES` denylist in
 * `release-coverage.ts` — is an **orthogonal axis**: it names structural/nav
 * types (`docsNavSection`, `redirect`, …) to suppress from uncovered-doc
 * reporting. It is intentionally NOT derived from this list (it denies, it does
 * not allow) and the two never need to agree.
 *
 * @see docs/decisions/D0085-doctype-renderer-contract.md
 * @see docs/design-docs/doctype-renderer-contract.md
 */
export declare const CANONICAL_DOC_TYPES: readonly ["article", "typesReference", "openApiReference"];
/** A documentation `_type` AILF renders with a high-fidelity renderer. */
export type CanonicalDocType = (typeof CANONICAL_DOC_TYPES)[number];
/**
 * GROQ array literal of {@link CANONICAL_DOC_TYPES} for `_type in [...]`
 * filters and `!(_type in [...])` exclusions. Derived from the tuple so the
 * literal cannot drift from it.
 *
 * @example `["article", "typesReference", "openApiReference"]`
 */
export declare const CANONICAL_DOC_TYPES_GROQ: string;
/** Narrowing predicate: is `value` one of the canonical (pinnable) doc types? */
export declare function isCanonicalDocType(value: string): value is CanonicalDocType;
