# 原料跨批次查重验收 任务键固定为 KSF-查重实测-20261102-01。这是独立验收,不重跑已成功的 K 轮。 ## 范围 独立执行器 scripts/workshop-dedup-acceptance.mjs,只调用现有 Skill 加密入口。context-dedup.example.json 是三字段模板,agentProfileKey=null 故意不可执行,由维护人填写已经核实的当前 Agent 档案键。不登记新身份,不包含员工账号或密钥。 本次不升级平台、Skill 或 Function,不重启服务。只新增执行器及私有输入/日志。实际运行会产生 sample 来源/原料、两批导入及审计记录;不是零数据库写入。重复业务实体会复用,导入日志仍正常增长。 ## 固定输入与变化规则 样例原文、来源标题、sourceKind=dataset、dataMode=sample,以及原料业务字段全部由脚本固定。原文声明为人工构造,无真实平台、供应商或检测依据。不添加虚假 URL。 两轮唯一变化:第一轮 requestId=任务键:batch-a,externalKey=任务键:material:a;第二轮 requestId=任务键:batch-b,externalKey=任务键:material:b。没有额外的 batch 字段,也不把批次写进原文或业务内容。 ## 顺序与成功判据 1. 只读合同确认 ksf.ingest-dedup.v1 与 ksfCheckDuplicates。 2. 第一轮只读查重,来源尚无精确命中才继续;已有历史则停止核对。 3. 第一轮导入,应为 sourceOperation=created、created=1、unchanged=0,保留 sourceId/materialId/jobId。 4. 第二轮只读查重,必须命中同一 sourceId/materialId。 5. 第二轮导入,应为 sourceOperation=unchanged、created=0、unchanged=1,两轮 sourceId/materialId 完全相同,jobId 不同。 6. 精确回读原料,确认全部样例业务字段及 sourceRef 一致。 成功 operation=sample-material-dedup-verified。接口真实字段为 unchanged;summary 中 secondReused=1 是便于阅读的同义说明,并非服务端另有 reused 字段。 ## 路径与权限 - 执行器 /opt/data/ksf-executor-20261102/workshop-dedup-acceptance.mjs,root 安装、0644、hermes 可读。 - 输入 /opt/data/ksf-workshop-private/context-dedup-01.json,hermes 属主、0600。 - 状态父目录 /opt/data/ksf-workshop-private/dedup,hermes 属主、0700。 - 目标状态目录 /opt/data/ksf-workshop-private/dedup/KSF-dedup-20261102-01 必须不存在。 执行器以 hermes UID10000 运行,自建0700目录;拒绝软链及不符合权限的输入/父目录。禁止删除已有目录来重跑。不递归 chown 数据卷。 维护人可从已核实的 context-K.json 读取 agentProfileKey,在内存中仅取这个字段,结合模板的 version/taskKey 生成新输入;不复制 conversationKey/participantProfileKey/完整旧上下文,不改 context-K.json。输入不构成员工登记来源。 命令由王刚001在一条新的真实企微消息授权任务中运行,环境 HOME=/opt/data: node /opt/data/ksf-executor-20261102/workshop-dedup-acceptance.mjs --input /opt/data/ksf-workshop-private/context-dedup-01.json --state-dir /opt/data/ksf-workshop-private/dedup/KSF-dedup-20261102-01 --execute 不由运维 Agent 冒用工作坊角色执行。 ## 失败与留存 每一步先记 in-flight,再调用现有 ksf-secure.mjs。完整输入、外层/内层回执、传输状态、journal、summary 均留在私有目录,文件0600。输出不含密钥、员工账号、会话键。 失败即停,不重试、不换键、不删样例记录、不清目录。返回错误不代表没有入库;超时/响应丢失时也可能已写入,以原 requestId、sourceId、materialId、jobId 与私有回执核查。 只回报 ok/operation/taskKey、两轮 sourceId/materialId/jobId、created/unchanged、两个 import invocationId 及状态目录。无需粘贴完整 journal 或输入上下文。 本地验证包含:真实业务处理代码在内存数据库中跨批次复用、第二批响应丢失时保留现场、预检不一致阻止第二次写入、已有历史停止。工作坊测试75/75通过;这些是本地验证,尚未代替目标实例的真实消息实测。