export type TransactionState = 'active' | 'validating' | 'validated' | 'committed' | 'rolling-back' | 'rolled-back' | 'failed' | 'expired'; export type TransactionOperationState = 'pending' | 'applied' | 'rolled-back' | 'cancelled' | 'failed'; export type TransactionOperationKind = 'create' | 'modify' | 'delete'; export type TransactionSnapshotHashMode = 'exact' | 'ignore-primitive-id' | 'absence'; export interface TransactionTarget { type: 'schematic-primitive' | 'pcb-primitive'; id: string; } export interface TransactionOperation { id: string; sequence: number; kind: TransactionOperationKind; state: TransactionOperationState; target: TransactionTarget; beforeSnapshot?: unknown; beforeHash?: string; afterSnapshot?: unknown; afterHash?: string; snapshotHashMode: TransactionSnapshotHashMode; restoredTargetId?: string; appliedAt?: string; rolledBackAt?: string; error?: string; compensation?: 'not-needed' | 'restored' | 'failed'; } export interface TransactionValidationResult { gate: string; passed: boolean; message: string; details?: Record; } export interface TransactionRecord { id: string; documentId: string; label?: string; state: TransactionState; createdAt: string; updatedAt: string; expiresAt: string; maxOperations: number; operations: TransactionOperation[]; validations: TransactionValidationResult[]; rollbackComplete?: boolean; error?: string; } export interface BeginTransactionInput { documentId: string; label?: string; maxOperations?: number; ttlMs?: number; } export interface TransactionValidationGate { name: string; run: (transaction: Readonly) => TransactionValidationResult | Promise; } export interface TransactionalModifyHooks { getSnapshot: () => Promise; apply: () => Promise; restore: (snapshot: unknown) => Promise; } export interface TransactionalModifyResult { result: TResult; operation: TransactionOperation; } export interface TransactionalCreateApplyResult { result: TResult; targetId: string; } export interface TransactionalCreateReconciliation { status: 'none' | 'created' | 'ambiguous'; targetId?: string; } export interface TransactionalCreateHooks { apply: () => Promise>; getSnapshot: (targetId: string) => Promise; remove: (targetId: string) => Promise; exists: (targetId: string) => Promise; reconcile?: () => Promise; } export interface TransactionalCreateResult { result: TResult; targetId: string; operation: TransactionOperation; } export interface TransactionalDeleteRecreateResult { targetId: string; snapshot?: unknown; } export interface TransactionalDeleteHooks { getSnapshot: () => Promise; apply: () => Promise; exists: () => Promise; recreate: (snapshot: unknown) => Promise; } export interface TransactionalDeleteResult { result: TResult; operation: TransactionOperation; } export interface RollbackRestoreResult { restoredTargetId?: string; } export interface RollbackHooks { restore: (operation: Readonly) => Promise; verify?: (operation: Readonly, restoreResult: Readonly) => Promise; getSnapshot?: (operation: Readonly) => Promise; } export interface RollbackResult { transaction: TransactionRecord; restoredOperationIds: string[]; failedOperationIds: string[]; }