/** * 验证执行记录存储 — VerificationRun 的文件 CRUD + HMAC provenance。 * * 职责边界: * - 负责:VerificationRun 读写、HMAC 验签(fail-closed) * - 不负责:门禁执行、证据评估(EvidenceEvaluator 消费) * * 被谁调用:EvidenceWriter(写,经 VerificationService 真实执行后)、EvidenceEvaluator(读,校验 provenance) * 调用谁:Node.js fs、provenance HMAC * * 数据流:VerificationRun JSON ↔ .soloforge/runs/{verification_run_id}.json * 持久化:.soloforge/runs/{verification_run_id}.json * * 主键:verification_run_id(唯一执行回执 id,非 task/domain/gate 复合键)。 * 分离 EvidenceView(声明,可被多份引用)与 VerificationRun(执行事实,唯一)。 */ import type { VerificationRun } from "./types.js"; import { type SignatureProvider } from "./signature_provider.js"; /** 生成唯一验证执行记录 id(run- + 12 hex,匹配文件名安全字符集)。 */ export declare function generateVerificationRunId(): string; /** * 验证执行记录存储 — 纯文件 CRUD + HMAC provenance,无业务逻辑。 * 通过构造函数注入 projectRoot,方便测试用临时目录。 */ export declare class VerificationRunStore { private readonly projectRoot; private readonly provider; constructor(projectRoot: string, provider?: SignatureProvider); /** run 文件路径。runId 须为安全字符集(防路径遍历)。 */ private filePath; /** 读取 + schema 校验 + HMAC 验签(fail-closed)。 * 伪造 run(无有效签名)→ null 排除;无 secret → null(run 是执行事实,无签名不可信,严格 fail-closed)。 * schema 非法/损坏 JSON → throw(不静默)。 */ private readAndValidate; /** 读取验证执行记录(不存在/伪造返回 null)。 */ read(runId: string): Promise; /** 写入验证执行记录(HMAC 签名 + 原子写)。无 secret 抛错(执行事实必须签名)。 */ write(run: VerificationRun): Promise; private writeUnlocked; private withRunLock; /** 删除验证执行记录。 */ delete(runId: string): Promise; }