/**
 * Task viability value types — used by the eval fast-fail validation step and
 * intended to also back a future dashboard new-eval picker guard so both share
 * one definition of "non-viable".
 *
 * The pure classifier that consumes these lives in
 * `../services/task-viability.ts` (`classifyTaskViability`).
 */
import type { TaskStatus } from "./generalized-task.js";
/** Why a selected task cannot be evaluated by the runner. */
export type TaskViabilityReason = "archived" | "not-found" | "unpublished-draft";
/**
 * Normalized publish-state signal for a single task id, as seen by a
 * drafts-visible read. Both `hasPublishedVersion` and `hasDraftVersion` can
 * be true at once (a published task with unpublished edits); `status` reports
 * the published document's lifecycle status when a published version exists,
 * otherwise the draft's.
 */
export interface TaskPublishState {
    /** A draft (`drafts.<id>`) version exists. */
    readonly hasDraftVersion: boolean;
    /** A published (non-draft) version exists. */
    readonly hasPublishedVersion: boolean;
    /** Lifecycle status of the resolved document, if known. */
    readonly status?: TaskStatus;
}
/** Result of classifying a task's viability for evaluation. */
export type TaskViabilityResult = {
    readonly reason: TaskViabilityReason;
    readonly viable: false;
} | {
    readonly viable: true;
};
