import { type RuntimeRecord } from "../domain/records.js"; import { type EvidenceReference, type EvidenceStore } from "../evidence/store.js"; import { type TrackedRolePolicyGate } from "../domain/role-policy.js"; import { type QueueLifecycleFields, type TicketState } from "../queue/model.js"; import { type ExhaustedQuotaGate, type FreshQuotaGate } from "../runtime/quota.js"; import { type TransitionResult } from "../runtime/record-store.js"; declare const TICKET_QUEUE_STORE: unique symbol; export type TicketSource = "github" | "local"; export type { TicketState } from "../queue/model.js"; export type TicketSyncStatus = "created" | "refreshed" | "unchanged"; export interface GitHubTicketInput { repository: string; issue_node_id: string; title: string; body: string | null; labels: string[]; url: string; updated_at: string; } export interface LocalTicketInput { ticket_id: string; title: string; body: string | null; labels: string[]; url: string | null; updated_at: string; } export type TicketContent = { schema_version: 1; ticket_id: string; source: TicketSource; repository: string | null; issue_node_id: string | null; title: string; body: string | null; labels: string[]; url: string | null; updated_at: string; }; export interface TicketWorktreeRef { branch: string; base_commit: string; } export interface TicketSyncOutcome { nonce: string; operation_sha256: string; status: TicketSyncStatus; content_sha256: string; content_file: string; record_version: number; } export type TicketQueuePayload = Record & QueueLifecycleFields & { ticket_id: string; source: TicketSource; source_ref_sha256: string; content_sha256: string; content_file: string; source_updated_at: string; ready_intent: true; policy_version: number; policy_digest: string; gate_digest: string | null; verification_plan_ref: EvidenceReference | null; worktree: TicketWorktreeRef | null; executor_evidence: EvidenceReference | null; verification_evidence: EvidenceReference | null; grade_evidence: EvidenceReference | null; prior_failure_evidence: EvidenceReference | null; prior_reflection_evidence: EvidenceReference | null; merge_disposition: "human_hold"; sync_outcomes: TicketSyncOutcome[]; }; export interface TicketContentRef { ticket_id: string; sha256: string; file_name: string; } export interface PreparedTicketContent { content: TicketContent; ref: TicketContentRef; source_ref_sha256: string; bytes: Buffer; } export interface TicketContentStore { prepareGitHub(input: GitHubTicketInput): PreparedTicketContent; prepareLocal(input: LocalTicketInput): PreparedTicketContent; write(prepared: PreparedTicketContent): "created" | "replayed"; read(ref: TicketContentRef): TicketContent; } export interface TicketQueueStore { readonly [TICKET_QUEUE_STORE]: true; read(recordId: string): RuntimeRecord; readIfExists(recordId: string): RuntimeRecord | undefined; list(): readonly RuntimeRecord[]; } export declare function assertTicketQueueStore(value: unknown): asserts value is TicketQueueStore; export interface TicketMaterializer { syncGitHub(input: GitHubTicketInput): SyncTicketResult; syncLocal(input: LocalTicketInput): SyncTicketResult; readContent(ref: TicketContentRef): TicketContent; read(recordId: string): TicketQueueRecord; readIfExists(recordId: string): TicketQueueRecord | undefined; } interface SyncTicketOptions { ticketStore: TicketContentStore; queueStore: TicketQueueStore; actorId: string; maxAttempts?: number; } export interface SyncGitHubTicketOptions extends SyncTicketOptions { input: GitHubTicketInput; } export interface SyncLocalTicketOptions extends SyncTicketOptions { input: LocalTicketInput; } export type SyncTicketResult = { status: TicketSyncStatus; ref: TicketContentRef; record: RuntimeRecord; }; export type TicketQueueRecord = RuntimeRecord; export type QueueMutationResult = TransitionResult; export interface ExpectedTicketMutation { ticketId: string; operationId: string; ownerId: string; expectedVersion: number; expectedAttempt: number; expectedActor: string; expectedLeaseToken: string | null; at: string; } export interface PrepareTicketInput extends ExpectedTicketMutation { verificationPlanRef: EvidenceReference; worktree: TicketWorktreeRef; } export interface LeaseTicketInput extends ExpectedTicketMutation { workerId: string; sessionId: string; leaseExpiresAt: string; } export interface BeginVerificationInput extends ExpectedTicketMutation { executorEvidence: EvidenceReference; } export interface CompleteTicketInput extends ExpectedTicketMutation { verificationEvidence: EvidenceReference; gradeEvidence: EvidenceReference; } export interface FailAttemptInput extends ExpectedTicketMutation { error: string; executorEvidence?: EvidenceReference; verificationEvidence?: EvidenceReference; gradeEvidence?: EvidenceReference; failureEvidence?: EvidenceReference; reflectionEvidence?: EvidenceReference; } export interface BlockVerificationInput extends ExpectedTicketMutation { error: string; verificationEvidence?: EvidenceReference; gradeEvidence?: EvidenceReference; } export interface AttachRetryReflectionInput extends ExpectedTicketMutation { reflectionEvidence: EvidenceReference; } export interface ParkTicketInput extends ExpectedTicketMutation { resumeAt: string; reason: string; quotaGate?: ExhaustedQuotaGate; } export interface ResumeTicketInput extends ExpectedTicketMutation { quotaGate?: FreshQuotaGate; } export interface QuarantineTicketInput extends ExpectedTicketMutation { reason: string; } export declare function deriveGitHubTicketIdentity(input: Pick): { ticket_id: string; source_ref_sha256: string; }; export declare function createTicketQueueStore(options: { recordsRoot: string; locksRoot: string; systemActors: readonly string[]; policyGate: TrackedRolePolicyGate; packageRoot?: string; policyRoot?: string; evidenceStore?: EvidenceStore; }): TicketQueueStore; export declare function createTicketLifecycleService(store: TicketQueueStore): Readonly<{ read: (ticketId: string) => TicketQueueRecord; authorityStatus(ticketId: string): "current" | "stale-policy" | "stale-gate"; prepare(input: PrepareTicketInput): QueueMutationResult; lease(input: LeaseTicketInput): QueueMutationResult; renew(input: ExpectedTicketMutation & { leaseExpiresAt: string; }): QueueMutationResult; start(input: ExpectedTicketMutation): QueueMutationResult; beginVerification(input: BeginVerificationInput): QueueMutationResult; complete(input: CompleteTicketInput): QueueMutationResult; failAttempt(input: FailAttemptInput): QueueMutationResult; blockVerification(input: BlockVerificationInput): QueueMutationResult; attachRetryReflection(input: AttachRetryReflectionInput): QueueMutationResult; park(input: ParkTicketInput): QueueMutationResult; resume(input: ResumeTicketInput): QueueMutationResult; quarantineStaleAuthority(input: QuarantineTicketInput): QueueMutationResult; rebindUnpreparedAuthority(input: ExpectedTicketMutation): QueueMutationResult; recoverExpiredLease(input: ExpectedTicketMutation): QueueMutationResult; }>; export declare function createTicketMaterializer(options: { queueStore: TicketQueueStore; ticketStore: TicketContentStore; actorId: string; }): TicketMaterializer; export declare function assertTicketMaterializer(value: unknown): asserts value is TicketMaterializer; export declare function assertTicketMaterializerEvidenceStore(materializer: TicketMaterializer, evidenceStore: EvidenceStore): void; export declare function createTicketContentStore(options: { ticketsRoot: string; packageRoot?: string; }): TicketContentStore; export declare function syncGitHubTicket(options: SyncGitHubTicketOptions): SyncTicketResult; export declare function syncLocalTicket(options: SyncLocalTicketOptions): SyncTicketResult;