/** * 测试集水印 hash 计算(spec §7.1)。 * * 规则: * - 文件层:按文件名排序后,把每个文件 basename + sha256 拼成 manifest * - 语义层:调用方传入 report.meta.sampleHashes 时,再追加排序后的 * sample_id + 完整样本契约指纹(包含外部 mock / custom assertion 依赖) * - 对完整 manifest 再 sha256,取前 12 hex chars。这样: * 1. 加 / 删 sample 文件 → hash 变 * 2. 任一文件内容改 → hash 变 * 3. 同样文件不同顺序 → hash 不变(排序后稳定) * * 历史问题: 之前对目录 readFileSync() 抛 EISDIR → 返回 null,gap report 水印丢失。 * * 导出: * - `computeTestSetHash`: pipeline 内部使用 * - `_computeTestSetHashForTest`: 单测专用别名,保留以兼容历史 import surface * (`test/eval-workflows/test-set-hash.test.ts`) */ export declare function computeTestSetHash(samplesPath: string, sourceFiles?: string[], sampleHashes?: Record): string | null; export declare function _computeTestSetHashForTest(samplesPath: string, sourceFiles?: string[], sampleHashes?: Record): string | null;