import { type RuntimeRecord } from "../domain/records.js"; import type { Engine, RoleId } from "../domain/role-policy.js"; import type { EvidenceReference } from "../evidence/store.js"; export type ResultGateState = "checking" | "checked" | "grading" | "graded" | "reflecting" | "finalized" | "blocked"; export type ResultGateOutcome = "completed" | "retryable" | "blocked"; export interface ResultGateSubject { readonly goal_id: string; readonly goal_version: number; readonly dispatch_id: string; readonly dispatch_version: number; readonly ticket_id: string; readonly verifying_ticket_version: number; readonly attempt: number; readonly max_attempts: number; readonly lease_token: string; readonly worker_record_id: string; readonly worker_id: string; readonly session_id: string; readonly executor_role: Extract; readonly executor_engine: Engine; readonly worktree_id: string; readonly worktree_root: string; readonly worktree_branch: string; readonly worktree_base_commit: string; readonly expected_commit: string; readonly policy_version: number; readonly policy_digest: string; readonly plan_digest: string; readonly verification_plan_ref: EvidenceReference; readonly executor_evidence: EvidenceReference; } export interface ResultGateRoleRequest { readonly request_id: string; readonly role_id: "oms.grader.codex" | "oms.grader.claude" | "oms.bounded-dreamer"; readonly engine: Engine; readonly evidence_schema: "grader-output.v1" | "reflection.v1"; readonly input: Readonly>; readonly started_at: string | null; readonly session_id: string | null; } export type ResultGatePayload = Record & { gate_id: string; subject: ResultGateSubject; created_at: string; updated_at: string; deterministic_evidence: EvidenceReference | null; grade_request: ResultGateRoleRequest | null; grade_evidence: EvidenceReference | null; reflection_request: ResultGateRoleRequest | null; reflection_evidence: EvidenceReference | null; outcome: ResultGateOutcome | null; trust_evidence: EvidenceReference | null; blocked_reason: string | null; }; export type ResultGateRecord = RuntimeRecord; export interface ResultGateStore { create(gateId: string, subject: ResultGateSubject, at: string): ResultGateRecord; read(gateId: string): ResultGateRecord; readIfExists(gateId: string): ResultGateRecord | undefined; transition(options: { record: ResultGateRecord; step: string; toState: ResultGateState; at: string; update: (payload: ResultGatePayload) => ResultGatePayload; }): ResultGateRecord; list(): readonly ResultGateRecord[]; } export declare function createResultGateStore(options: { packageRoot: string; stateRoot: string; }): ResultGateStore;