Files
kefu/deploy/recognition-audit-20260916/finalize_report.py
T
2026-09-21 10:34:06 +08:00

43 lines
2.4 KiB
Python

"""Record final source hashes and reported test evidence without business data."""
import hashlib
import json
from pathlib import Path
base=Path(__file__).parent
roots=[Path('C:/kefu/wechat_rpa'),Path('C:/wechat_rpa')]
names=['ai_chat.py','model_protocol.py','model_gateway.py','backend_client.py','session_name.py','wechat_bot.py','wxwork_db.py','protocol_engine.py']
manifest=[]
for root in roots:
for name in names:
path=root/name
if not path.exists():continue
content=path.read_bytes()
compile(content,str(path),'exec')
manifest.append({'path':str(path),'sha256':hashlib.sha256(content).hexdigest()})
for path in sorted(root.glob('test_*audit*.py')):
compile(path.read_bytes(),str(path),'exec')
manifest.append({'path':str(path),'sha256':hashlib.sha256(path.read_bytes()).hexdigest()})
evidence={}
for name in (
'visual-source-final','visual-target-final','visual-real-ocr-source','visual-real-ocr-target',
'ai-context-source','ai-context-target','protocol-source-final','protocol-target-final',
'knowledge-source-final','knowledge-target-final','gateway-guard-source','gateway-guard-target',
'knowledge-cache-source-after','knowledge-cache-target-after',
'visual-trace-source','visual-trace-target'):
path=base/(name+'.json')
if not path.exists():continue
data=json.loads(path.read_text(encoding='utf-8-sig'))
# OCR full cases retained in original artifact, aggregate in summary.
if 'cases' in data:
data={'cases':len(data['cases']),'exact':sum(bool(item.get('exact')) for item in data['cases'])}
evidence[name]=data
result={'date':'2026-09-16','source_files':manifest,'test_evidence':evidence,
'production_deployed':False,'real_wechat_messages_sent':False,
'real_model_requests':'synthetic data only; see live-*.json',
'backups':[str(root/'backups/recognition-audit-20260916') for root in roots]}
(base/'final-verification.json').write_text(json.dumps(result,ensure_ascii=False,indent=2),encoding='utf-8')
report=base/'TEST_REPORT.md'
text=report.read_text(encoding='utf-8').replace('| 105/105 | 105/105 | 临时数据库与模拟上游;最终追加回归见结果 JSON |','| 126/126 | 126/126 | 含最终视觉角色路由、上传异常和知识检索组合回归 |')
report.write_text(text,encoding='utf-8')
print(json.dumps({'compiled_files':len(manifest),'evidence_groups':list(evidence),'report':str(report)},ensure_ascii=False))