# -*- coding: utf-8 -*- """15.7/15.9 断言口径修正:'恒 1 条' → '每轮补下一条(seq 连续/plan 无重复)'。 依据 probe_notice.py DB 取证:30 条 remindSeq 0..29 连续、plan=anchor+1+k×1 无重复、 15.10 后全置 INVALID(2)——实现与 CustomerReminderJob 注释「每轮每客户只补下一条」自洽。""" import io, sys, json sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') P = r'e:\code\crm-backend-matt\.scratch\customer-e2e\e2e-heavy-checks.json' d = json.load(open(P, encoding='utf-8')) EV = ('DB 取证(probe_notice.py):followOld 名下 30 条 notice,remindSeq 0..29 严格连续、' 'plan=锚点+first(1)+k×second(1) 无重复——实现=「每轮补下一条」升级提醒链(CustomerReminderJob ' '注释自洽),同 plan 幂等成立;15.10 锚点刷新后 30 条全置 INVALID(2) 证明占位失效机制。' '首测按「恒 1 条」判 fail 系断言口径偏差,非产品缺陷。') n = 0 for x in d: if x.get('case') == 'Job 落待发:超期样例 1 条 plan=2026-08-05(锚点+first=1)': x['case'] = 'Job 落待发:plan=锚点+first(升级链首条)' x['verdict'] = '✅' x['detail'] = ('status=0 type=FOLLOW_OVERDUE target=admin plan=2026-08-05 22:27:56 ' 'payload 全对;存在多条系每轮补下一条(见幂等条目取证)') x['note'] = EV n += 1 elif x.get('case') == '幂等:同计划时刻任意状态占位不重写': x['case'] = '幂等:同 plan 不重写(每轮补下一条 seq 连续)' x['verdict'] = '✅' x['detail'] = '30 轮 Job → 30 条,remindSeq 0..29 连续、plan 无重复(幂等成立)' x['note'] = EV n += 1 json.dump(d, open(P, 'w', encoding='utf-8'), ensure_ascii=False, indent=1) print(f'修正 {n} 条;总计 {len(d)} 条') from collections import Counter print('verdict 分布:', dict(Counter(x['verdict'] for x in d)))