/**
 * Shared section builders for the Slack notification templates. Each returns
 * SlackBlock[] (empty when its data is absent) so templates compose by listing
 * sections and the body reveals itself by field presence. Pure; no I/O, no env.
 */
import type { Report } from "../../types/index.js";
import type { SlackBlock, SlackBuildOptions } from "./types.js";
export declare function overallSection(report: Report, _options: SlackBuildOptions): SlackBlock[];
export declare function areaScoresSection(report: Report, options: SlackBuildOptions, heading?: string): SlackBlock[];
export declare function comparisonSection(report: Report): SlackBlock[];
export declare function recommendationsSection(report: Report): SlackBlock[];
export declare function failureModesSection(report: Report): SlackBlock[];
/**
 * Shared errors section (B3): fully-errored tasks (id + classification +
 * truncated sample error), the error-rate ("N of M tests errored"), and
 * classification counts (`byClassification`). Rendered by the `errored`
 * template and reused inside `breached` / `regressed`.
 *
 * Returns `[]` unless `report.summary.errorSummary` is present AND trips the
 * shared B2 condition ({@link errorSummaryTrips}), so a run with no error data
 * — or an error rate below threshold and no fully-errored task — leaves the
 * other templates unchanged.
 */
export declare function errorsSection(report: Report): SlackBlock[];
export declare function provenanceSection(report: Report, options: SlackBuildOptions): SlackBlock[];
export declare function footerSection(report: Report): SlackBlock;
/** Build the report `actions` block. URL buttons always render; interactive
 *  buttons render unless gated off via options.actions. */
export declare function reportActions(report: Report, options: SlackBuildOptions, opts: {
    primaryLabel?: string;
    ackLabel?: string;
    ackDanger?: boolean;
    rerun?: boolean;
}): SlackBlock;
