import { type SignatureProvider } from "./signature_provider.js"; import type { ResolutionEvidenceRef } from "./resolution_store.js"; /** 裁决动作:challenge=重挑战(报回 dismissed error);dismiss=驳回(维持);confirm=确认成立;reopen=重开。 */ export type AdjudicationAction = "challenge" | "dismiss" | "confirm" | "reopen"; /** 裁决事件创建者。 */ export type AdjudicationCreatedBy = "user" | "reviewer" | "ai"; /** 审查裁决事件记录 — finding 裁决状态变迁(append-only 事件流,不改 finding)。 * HMAC provenance 防伪造(与 gate/review/waiver/decision/resolution 同源);纯软件下读 secret 者可伪造,提高门槛非根治。 */ export interface AdjudicationRecord { schema_version: 1; /** 事件 id(唯一,adj-;Store 文件名 + 审计定位) */ adjudication_id: string; /** 关联 review(可选,审计追溯) */ review_id?: string; /** 关联 finding(= reviewFindingKey;事件按 finding 聚合算 challenge 次数) */ finding_id: string; /** 所属任务(防跨任务复用) */ task_id: string; /** 裁决动作(challenge/dismiss/confirm/reopen) */ action: AdjudicationAction; /** 变迁前状态(如 stable_dismissed) */ previous_state: string; /** 变迁后状态(如 re_challenged) */ next_state: string; /** 变迁理由 */ reason: string; /** 证据引用(可空) */ evidence_refs: ResolutionEvidenceRef[]; /** 创建者(user/reviewer/ai) */ created_by: AdjudicationCreatedBy; created_at: number; /** HMAC provenance 签名(有 secret 时签发,read 验签排除伪造) */ hmac?: string; } /** 生成新 adjudication_id(adj-)。 */ export declare function generateAdjudicationId(): string; /** 审查裁决事件存储 — 纯文件 CRUD + HMAC provenance,append-only(不改 finding/review/Resolution)。 */ export declare class AdjudicationStore { private readonly projectRoot; private readonly provider; constructor(projectRoot: string, provider?: SignatureProvider); private filePath; private withAdjudicationLock; /** 读取 + schema 校验 + HMAC 验签(fail-closed)。伪造/无 secret → null;损坏 schema throw。 */ private readAndValidate; /** 列出某 finding 的所有裁决事件(按 created_at 升序;append-only 下多条事件流)。 */ listByFinding(findingId: string): Promise; /** 列出某 review 的所有裁决事件。 */ listByReview(reviewId: string): Promise; /** 统计某 finding 被 challenge 的次数(ConvergenceController.priorChallenges 真实来源)。 */ countChallenges(findingId: string): Promise; private listBy; /** 持久化(append-only:只写新事件文件,不改 finding/review/Resolution)。无 secret throw(fail-closed)。 */ write(record: AdjudicationRecord): Promise; }