| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- """Build the standalone sample dedup acceptance delivery without private inputs."""
- from pathlib import Path
- import hashlib
- import json
- import zipfile
- ROOT = Path(__file__).resolve().parents[1]
- DEST = ROOT / 'work/delivery-by-recipient-20261102'
- KEY = 'KSF-查重实测-20261102-01'
- OPS = '''运维001:查重验收选A,专用执行器已准备好。只落地脚本和输入,不重启、不改Skill/Function、不代跑业务。
- 1. 在独立目录解包,核验FILES.sha256。对照本次交付ZIP指纹,不改清单。
- 2. 目标仍是R730 / agent-node-u17879018108。执行器安装到 /opt/data/ksf-executor-20261102/workshop-dedup-acceptance.mjs,root:root 0644;用目标Node做 node --check。不要覆盖workshop-full-chain.mjs。
- 3. 模板context-dedup.example.json的agentProfileKey=null故意不可运行。仅从已核实的context-K.json取agentProfileKey字段,或回读已核实当前Agent档案键;核对和现有registration.json一致,不新建身份。以hermes(10000)、HOME=/opt/data写 /opt/data/ksf-workshop-private/context-dedup-01.json,0600,字段仅version/taskKey/agentProfileKey。不输出完整上下文。
- 4. 以hermes建父目录 /opt/data/ksf-workshop-private/dedup,0700;检查目标 /opt/data/ksf-workshop-private/dedup/KSF-dedup-20261102-01 不存在。有任何痕迹先核查,不删除目录重跑,不另换任务键,不碰full-chain-K。
- 5. 落地后回报脚本SHA、语法检查、输入属主权限、状态目录不存在,交王刚001在真实消息任务中执行。你不在运维身份下执行入库。
- 目标侧执行会产生一份sample来源/原料和两批导入审计。重复实体复用不代表数据库完全不增长。详情见docs/workshop-dedup-acceptance-20261102.md。
- '''
- WANG = '''王刚001:本次执行专用查重验收,任务键固定 KSF-查重实测-20261102-01。待运维完成落地后,在本条真实消息授权的任务中,以hermes(10000)、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
- 脚本固定样例内容,只换两轮requestId和externalKey;不创建工作坊会话或报告、不重跑K轮、不手工构造身份。首次导入预期created=1,第二次created=0/unchanged=1,且sourceId/materialId前后相同。unchanged就是本次要验证的复用。
- 成功回报:ok、operation、taskKey,两轮sourceId/materialId/jobId/created/unchanged,两次import invocationId及状态目录。不贴完整输入/日志/账号。成功operation应为sample-material-dedup-verified。
- 失败立即停,保留原键、目录和全部回执,不自动重试、不删记录、不换目录重跑;报最后一步、错误码及已返回编号。错误不等于零写入,超时也可能已入库。当前仅授权本样例验收,不宣称真实平台采集或正式报告通过。
- '''
- def main():
- DEST.mkdir(parents=True, exist_ok=True)
- files = {
- 'scripts/workshop-dedup-acceptance.mjs': (ROOT / 'scripts/workshop-dedup-acceptance.mjs').read_bytes(),
- 'docs/workshop-dedup-acceptance-20261102.md': (ROOT / 'docs/workshop-dedup-acceptance-20261102.md').read_bytes(),
- 'context-dedup.example.json': (json.dumps({'version': 'ksf.dedup-acceptance.v1', 'taskKey': KEY, 'agentProfileKey': None}, ensure_ascii=False, indent=2) + '\n').encode(),
- '给运维001-查重验收落地.txt': OPS.encode(),
- '给王刚001-查重验收执行.txt': WANG.encode(),
- }
- digest = lambda b: hashlib.sha256(b).hexdigest()
- files['FILES.sha256'] = ''.join(f'{digest(b)} {name}\n' for name,b in files.items()).encode()
- target = DEST / 'ksf-dedup-acceptance-20261102.zip'
- with zipfile.ZipFile(target, 'w', compression=zipfile.ZIP_DEFLATED) as z:
- for name,b in files.items():
- z.writestr(name,b)
- with zipfile.ZipFile(target) as z:
- assert z.testzip() is None
- assert len(z.namelist()) == 6
- for line in z.read('FILES.sha256').decode().splitlines():
- sha,name = line.split(' ',1)
- assert digest(z.read(name)) == sha
- assert json.loads(z.read('context-dedup.example.json'))['agentProfileKey'] is None
- assert z.read('scripts/workshop-dedup-acceptance.mjs') == files['scripts/workshop-dedup-acceptance.mjs']
- for name in ['给运维001-查重验收落地.txt', '给王刚001-查重验收执行.txt']:
- (DEST / name).write_bytes(files[name])
- receipt = {'file': target.name, 'bytes': target.stat().st_size, 'sha256': digest(target.read_bytes()), 'manifestChecked': '5/5', 'archiveIntegrity': True, 'executorSha256': digest(files['scripts/workshop-dedup-acceptance.mjs']), 'containsCredentials': False, 'targetExecuted': False}
- (DEST / 'ksf-dedup-acceptance-20261102.receipt.json').write_text(json.dumps(receipt, ensure_ascii=False, indent=2),encoding='utf-8')
- print(json.dumps(receipt, ensure_ascii=False, indent=2))
- if __name__ == '__main__':
- main()
|