export type TaskStatus = "pending" | "ready" | "in_progress" | "blocked" | "review" | "approved" | "rejected" | "done" | "canceled" | "archived"; export type ReviewResult = "approve" | "block" | "changes"; export type Severity = "info" | "low" | "medium" | "high" | "critical"; export type EvidenceType = "command" | "file" | "screenshot" | "trace" | "video" | "log" | "report"; export type VerifierContractSurface = "cli" | "api" | "web" | "mobile" | "desktop" | "db" | "cloud" | "workflow" | "generated-artifact"; export type VerifierContractAssertionType = "equals" | "contains" | "matches" | "exists" | "custom"; export interface VerifierContractEntry { id: string; surface: VerifierContractSurface; setup: string; action: string; expectedObservable: string; assertionType: VerifierContractAssertionType; evidenceArtifact: string; ownerRole: string; required?: boolean; acceptanceCriteria?: string[]; } export interface VerifierContractSet { version: 1; entries: VerifierContractEntry[]; } export interface MechanicalOverride { rationale: string; } export interface ArchitectureApproval { proposal?: string; userApproved?: boolean; approvedBy?: string; approvedAt?: string; } export interface QaGateMetadata { plan?: string; executionStatus?: "not_run" | "passed" | "failed" | "deferred"; deferredRationale?: string; deferredOwner?: string; } export type RiskImpactArea = "security" | "sre" | "dba" | "data" | "devops" | "compliance" | "accessibility" | "ux"; export interface RiskAcceptance { acceptedBy?: string; rationale?: string; } export interface RiskGateMetadata { impactAreas?: RiskImpactArea[]; acceptance?: RiskAcceptance; } export interface TaskWorkflowMetadata { requiredRoles?: string[]; optionalRoles?: string[]; phaseSequence?: string[]; } export interface Task { id: string; title: string; ownerRole: string; status: TaskStatus; dependencies: string[]; backlogItem?: string; goal?: string; scope?: string; acceptanceCriteria?: string[]; definitionOfReady?: string[]; definitionOfDone?: string[]; assumptions?: string[]; risks?: string[]; paths?: string[]; testStrategy?: string; blockedReason?: string; mechanicalOverride?: MechanicalOverride; architectureApproval?: ArchitectureApproval; qaGate?: QaGateMetadata; riskGate?: RiskGateMetadata; workflow?: TaskWorkflowMetadata; verifierContract?: VerifierContractSet; externalRefs?: ExternalTaskReferences; claimedAt?: string; doneAt?: string; createdAt?: string; updatedAt?: string; } export interface ExternalTaskReferences { setupAgents?: SetupAgentsTaskReference; } export interface SetupAgentsTaskReference { sourceId: string; sourcePath?: string; profileId?: string; mode?: string; contractVersion?: string; acceptanceStatus?: string; acceptedBy?: string; evidenceIds?: string[]; handoffIds?: string[]; } export interface LockEntry { id: string; taskId: string; ownerRole: string; path: string; reason: string; createdAt: string; expiresAt?: string; } export interface EventEntry { id: string; type: string; timestamp: string; actor: string; summary: string; taskId: string | null; artifacts?: string[]; metadata: Record; } export interface EventInput { type: string; actor: string; summary: string; taskId?: string; artifacts?: string[]; metadata?: Record; } export type AddTaskInput = Pick; export interface UpdateTaskInput { id: string; title?: string; ownerRole?: string; backlogItem?: string; goal?: string; scope?: string; paths?: string[]; acceptanceCriteria?: string[]; replaceAcceptanceCriteria?: boolean; assumptions?: string[]; risks?: string[]; testStrategy?: string; status?: TaskStatus; blockedReason?: string; architectureApproval?: ArchitectureApproval; qaGate?: QaGateMetadata; riskGate?: RiskGateMetadata; workflow?: TaskWorkflowMetadata; verifierContract?: VerifierContractSet; claimedAt?: string; doneAt?: string; } export interface ClaimLockInput { id?: string; taskId: string; ownerRole: string; path: string; reason: string; expiresAt?: string; } export interface HandoffInput { task: string; from: string; to: string; changed: string; behavior: string; tests: string; commands: string; status?: string; gaps?: string; risks?: string; playwright?: string; executorProvenance?: string; transitionContract?: { fromRole: string; toRole: string; phase: string; nextPhase: string; requiredFields: string[]; assessments: Array<{ field: string; status: "covered" | "gap"; detail: string; }>; }; updateOwner?: boolean; } export interface ReviewInput { task: string; role: string; result: string; severity: string; findings: string; recommendation: string; returnRole?: string; returnPhase?: string; } export interface EvidenceInput { task: string; role: string; type: string; summary: string; path?: string | boolean | string[]; command?: string | boolean | string[]; exitCode?: string | boolean | string[]; diffExcerpt?: string | boolean | string[]; surface?: string | boolean | string[]; assertions?: string | boolean | string[]; verifierContractId?: string | boolean | string[]; externalValidation?: string | boolean | string[]; deferredOwner?: string | boolean | string[]; deferredRationale?: string | boolean | string[]; deferredEnvironment?: string | boolean | string[]; deferredNextCommand?: string | boolean | string[]; } export interface PlaywrightEvidenceInput { task: string; kind: "screenshot" | "trace" | "video" | "report"; path: string; summary: string; runId?: string; } export interface ArtifactResult { artifact: string; content: string; } export interface DecisionInput { task: string; title: string; context: string; decision: string; consequences: string; status: "proposed" | "accepted" | "superseded"; owner: string; } export interface DecisionRecord extends DecisionInput { artifact: string; }