/** * Queue Actionability Policy — PRI-253 * * Pure classification: is a given internalization task actionable * for the current MVP release, or should it be suppressed from the * operator-actionable queue? * * I/O boundary: enabledChannels and actionableTaskKinds are provided * by the caller (pd-cli via feature flags). This module never reads * files or loads configuration. */ import type { RunnerKind, PeerRunnerKind, InternalizationChannel } from './peer-runner-contracts.js'; /** * Task kinds considered operator-actionable: visible as `ready` (not * `suppressed`) in the queue snapshot and counted toward `readyTaskCount`. * * `rollout_reviewer` is included so pending rollout-review tasks stay visible * in the queue snapshot. Under the `internalization_full_chain` flag (ON by * default) the auto-consumer advances it automatically — the human gate is the * approval queue (Owner approves/rejects in the Console), not this runner. * Manual advancement via `pd runtime internalization run-once --runner * rollout_reviewer` remains available for operators. */ export declare const MVP_CORE_TASK_KINDS: readonly PeerRunnerKind[]; export interface ActionabilityPolicyInput { enabledChannels: Set; actionableTaskKinds: Set; } export interface SuppressedDiagnostic { taskId: string; taskKind: RunnerKind; channel: InternalizationChannel; reason: 'channel_disabled' | 'task_kind_not_mvp_actionable'; } export type TaskActionabilityResult = { actionable: true; } | { actionable: false; reason: 'channel_disabled' | 'task_kind_not_mvp_actionable'; diagnostic: SuppressedDiagnostic; }; export interface TaskClassificationInput { taskId: string; taskKind: RunnerKind; channel: InternalizationChannel; } export declare function classifyTaskActionability(task: TaskClassificationInput, policy: ActionabilityPolicyInput): TaskActionabilityResult; //# sourceMappingURL=queue-actionability.d.ts.map