package-agent-library-read-acceptance.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """Verify the received evidence and build the bounded current-CLI acceptance."""
  2. import datetime
  3. import hashlib
  4. import json
  5. from pathlib import Path
  6. import zipfile
  7. ROOT = Path(__file__).resolve().parents[1]
  8. NAME = 'ksf-agent-library-read-acceptance-20261108-r2'
  9. INCOMING = Path('D:/下载/WXWork/1688857450794210/Cache/File/2026-11/agent-library-read-receipt.json')
  10. EXPECTED = 'c5454853a5abdacc9f8353252f214b1906dec1190aa52abdb661523f3b40d346'
  11. sha = lambda raw: hashlib.sha256(raw).hexdigest()
  12. def main():
  13. raw = INCOMING.read_bytes()
  14. assert len(raw) == 11821 and sha(raw) == EXPECTED
  15. prior = json.loads(raw)
  16. generation = prior['contract']['generation']
  17. assert generation == prior['board']['generation']
  18. assert prior['fieldReadVerified'] and not prior['originalConditionVerified']
  19. archive = ROOT / 'docs/agent-library-read-repair-20261108/receipts/r1'
  20. archive.mkdir(parents=True, exist_ok=True)
  21. copied = archive / INCOMING.name
  22. if copied.exists(): assert copied.read_bytes() == raw
  23. else: copied.write_bytes(raw)
  24. state = {'schema': 'ksf.agent-library-read-expected.v1',
  25. 'sourceReceiptSha256': EXPECTED, 'generation': generation,
  26. 'skillFingerprint': prior['skillFingerprint'],
  27. 'installedFingerprints': prior['installedFingerprints']}
  28. files = {
  29. '发给王刚001-r2.md': (ROOT / 'docs/agent-library-read-repair-20261108/发给王刚001-r2.md').read_bytes(),
  30. 'probe-agent-library-read.py': (ROOT / 'scripts/probe-agent-library-read.py').read_bytes(),
  31. 'expected-instance.json': (json.dumps(state, ensure_ascii=False, indent=2) + '\n').encode('utf-8')}
  32. files['FILES.sha256'] = ''.join(sha(body) + ' ' + name + '\n' for name, body in files.items()).encode('utf-8')
  33. out = ROOT / 'artifacts' / NAME
  34. out.mkdir(parents=True, exist_ok=True)
  35. dest = out / (NAME + '.zip')
  36. with zipfile.ZipFile(dest, 'w', zipfile.ZIP_DEFLATED) as z:
  37. for name, body in files.items(): z.writestr(name, body)
  38. with zipfile.ZipFile(dest) as z:
  39. assert z.testzip() is None
  40. for line in z.read('FILES.sha256').decode('utf-8').splitlines():
  41. digest, name = line.split(' ', 1); assert sha(z.read(name)) == digest
  42. receipt = dict(ok=True, filename=dest.name, bytes=dest.stat().st_size,
  43. sha256=sha(dest.read_bytes()), filesVerified=3, entries=4,
  44. createdAt=datetime.datetime.now(datetime.timezone.utc).isoformat(),
  45. priorReceiptVerified=True, fieldReadVerified=True,
  46. currentCliVerified=False, historicalRootCauseVerified=False,
  47. deployed=False, installedCodeIncluded=False, credentialsIncluded=False)
  48. (out / 'delivery-receipt.json').write_text(json.dumps(receipt, ensure_ascii=False, indent=2) + '\n', encoding='utf-8')
  49. print(json.dumps(receipt, ensure_ascii=False))
  50. if __name__ == '__main__': main()