/**
 * Phase-aware runtime shadow derivation.
 *
 * This module is intentionally side-effect free. Slice 2 derives the current
 * phase from recorded events but does not change gate decisions yet.
 */
import type { TaskExecutionState } from './protocol/types.js';
import type { DeliverableContractClassification } from './deliverable-contract.js';
import type { DerivedTurnPhase, EditNowNudge } from './protocol/task-permission-types.js';
type PhaseStateInput = Pick<TaskExecutionState, 'phaseEvents' | 'proposedToolCalls' | 'contract'>;
export declare function deriveTurnPhase(taskState: PhaseStateInput): DerivedTurnPhase;
export interface AbandonedGrantDecisionLike {
    fire: boolean;
    reason?: string;
    nudge?: EditNowNudge;
}
export interface NoProgressInterventionInput {
    oldHardStop: boolean;
    phaseVerdict: DerivedTurnPhase;
    abandonedGrantDecision: AbandonedGrantDecisionLike;
}
export interface NoProgressInterventionDecision {
    fire: boolean;
    reason: string;
    nudge?: EditNowNudge;
    phaseAllowsContinue: boolean;
}
export interface CompletionClaimEvaluationInput {
    taskState: Pick<TaskExecutionState, 'phaseEvents' | 'proposedToolCalls' | 'contract'>;
    finalText: string;
    deliverable: DeliverableContractClassification;
    legacyCompletionAccepted: boolean;
    phaseVerdict?: DerivedTurnPhase;
}
export interface CompletionClaimEvaluationDecision {
    status: 'accepted' | 'blocked' | 'not_completion';
    reason: string;
    artifactEvidenceCount: number;
    verificationEvidenceCount: number;
    pendingRiskyGrantCount: number;
}
export declare function shouldInterveneForNoProgress(input: NoProgressInterventionInput): NoProgressInterventionDecision;
export declare function evaluateCompletionClaim(input: CompletionClaimEvaluationInput): CompletionClaimEvaluationDecision;
export {};
