/** * EvidenceEvaluation 类型定义(V1 EvidenceEvaluator class 已删,全 value consumer 迁 V2 adapter)。 * * V1 EvidenceEvaluator class(读 + V1 底座组装)已删()。5 个 value consumer 全迁 * V2EvidenceEvaluator(src/core/v2/evidence_evaluator_v2,读 V2 VerificationEvidenceStore,复用 V1 底座): * - sf_verify.readVerificationStatus()/ handle_query()/ doctor() * - handle_advance()/ sf_review cross_artifact() * * 本文件保留类型(EvidenceEvaluation/EvidenceIssueReason/EvidenceDiagnostic)供 V2 adapter + consumer 使用。 * 类型与 class 分离(class 删,类型留此文件,最小修改 — consumer import 路径不变)。 * * 未物理拆分到 evidence_types.ts(避免 11+ type consumer 改 import 路径);若后续需纯净拆分,可迁移类型到 * 独立文件 + 批量改 import。当前最小修改:类型留此文件(class 已删)。 */ import type { EvidenceView } from "../types.js"; import type { FullVerificationEvidenceRequirement } from "./evidence_requirement_policy.js"; import type { ReviewEvidenceDiagnostic } from "./adversarial_review_evaluator.js"; export interface EvidenceEvaluation { records: EvidenceView[]; passed: boolean; applicable: boolean; missing: FullVerificationEvidenceRequirement[]; invalid: EvidenceView[]; diagnostics: EvidenceDiagnostic[]; adversarialReviewPassed?: boolean; adversarialReviewDiagnostics: ReviewEvidenceDiagnostic[]; } /** Evidence diagnostic 的失败原因(防伪造/stale/snapshot 等)。 * 末三类是 advisory/审计标记:挂在 status="valid" 的 diagnostic 上,可见但不阻断 deliver * (handle_deliver 只看 missing/invalid,reasons 不参与阻断)。 */ export type EvidenceIssueReason = "missing_record" | "verification_failed" | "artifact_missing" | "content_stale" | "verification_input_stale" | "ruleset_stale" | "engine_stale" | "evaluation_snapshot_changed" | "forged_no_run_ref" | "forged_no_run" | "forged_run_binding" | "forged_run_result" | "forged_run_digest" | "engine_metadata_stale" | "inherited_cross_task" | "inherited_input_axis_skipped"; /** @runtimeContract 由导出的生命周期结果类型间接公开,声明生成必须能命名。 */ export interface EvidenceDiagnostic { artifact_kind: string; artifact_path: string; domain: FullVerificationEvidenceRequirement["domain"]; status: "valid" | "missing" | "invalid"; reasons: EvidenceIssueReason[]; }