test: add session and memory replay consistency harness#238
test: add session and memory replay consistency harness#238Audience-jmf wants to merge 8 commits into
Conversation
|
CLA Assistant Lite bot All contributors have signed the CLA ✍️ ✅ |
AI Code Review我已经完成了审查。让我来定稿。 基于我对 发现的问题🚨 Critical
|
| "timestamp": "<generated-summary-time>" if is_summary else event.timestamp, | ||
| "partial": event.partial, | ||
| "turn_complete": event.turn_complete, | ||
| "visible": event.visible, |
There was a problem hiding this comment.
mock Redis 语义覆盖缺口,断言易失真
create_mock_redis_backend 用进程内 _InProcessRedisStorage 替换已构造的真实 RedisStorage,其 close() 为空实现,原连接池未释放;且只覆盖部分命令,SDK 调用面扩展(如 TTL 的 expire、search_memory 走 type/lrange)时会抛 ValueError 或偏离真实 Redis 语义,使 Redis 一致性断言失去意义。建议补齐命令或改用真实 RedisStorage + fakeredis。
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #238 +/- ##
==========================================
Coverage ? 87.86812%
==========================================
Files ? 482
Lines ? 45162
Branches ? 0
==========================================
Hits ? 39683
Misses ? 5479
Partials ? 0 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
AI Code Review确认了 — 提交的 JSON 从未被加载或对比过;测试只会写入 现在让我更仔细地检查一下 让我再重新考虑一个真正的问题: 现在让我完成最终报告。我将报告:
让我再仔细检查一下 等等,这里有一个真正的问题:在 让我重新考虑一下是否真的存在任何严重(Critical)问题。我认为没有安全/逻辑/数据方面的 bug。让我写下总结。 其实,让我再重新考虑一个潜在的实际 bug:在 好的,让我完成总结。让我重新考虑一下 SQL 中 但是多个 但测试框架在操作之间没有重新获取 但是等等 — 对于 InMemory, 对于 SQL, 现在, 嗯,其实等一下 — 让我重新考虑。事件上的 SQL TTL 过滤: 那么 BASE_TIMESTAMP 到底有什么作用呢?它会设置 好了。让我完成总结。我将报告关于 JSON baseline 问题的警告以及一个小建议。 让我再重新考虑一下是否应该将 JSON baseline 问题标记为警告。它确实存在:一个提交的产物没有被测试,设计文档声称它已被校验,而 让我再重新考虑一下 让我重新考虑一下实际的测试有效性差距: 让我完成总结。 其实,还有一个真正的问题我想验证一下: 但这里有一个真正的问题:两个 SQL 后端都创建了一个 好了,让我写总结。 让我重新考虑一下是否真的有任何严重(Critical)问题 — 没有。我将跳过“严重”部分。 让我更精准地重新考虑 JSON 基线警告 — 有两个不同的子问题: 这些问题具有相同的根本原因(提交的 JSON 具有误导性/未经验证),因此合并为一条警告。 还有一件事 — 让我验证一下 (b) — 现在让我写总结。我已对 发现的问题
|
|
I have read the CLA Document and I hereby sign the CLA |
bf1a456 to
d426919
Compare
AI Code Review现在让我更仔细地重新检查一下 但有一个值得注意的细微问题: 现在让我重新考虑一个真正的问题:在 现在让我重新考虑 让我完成工作。我认为这是一个高质量的 PR,没有关键问题。让我找出 1-2 个真正的建议/警告。 一个真正的警告: 让我重新考虑最具体的问题: 让我再核实一下 现在进行最终总结。让我重新考虑关于 我已经完成了彻底的审查。让我写下结论。 发现的问题
|
AI Code Review好的。我已经有足够的信息来撰写审查意见了。让我仔细检查一下剩余的顾虑 —— 发现的问题🚨 Critical
|
| assert all( | ||
| any(difference["summary_id"] for difference in result["differences"]) | ||
| for result in persisted_report["injected_cases"] if result["fault_id"].startswith("summary_")) | ||
| assert canonical_report(persisted_report) == canonical_report(committed_report) |
There was a problem hiding this comment.
提交基线报告全等比较依赖易变运行环境,CI 必失败
canonical_report(persisted_report) == canonical_report(committed_report) 把本次运行产生的报告与仓库提交基线做全等比较,但归一化只覆盖 generated_at、duration_seconds 及两条 allowed 路径,其余 left_value/right_value 原样保留。任何依赖时钟/SQLite 精度/临时目录的差异都会让等式不成立。建议仅断言指标与结构,或把整份基线纳入归一化。
背景
本 PR 实现 #89 要求的 Session / Memory / Summary 多后端回放一致性测试框架。框架使用同一组标准化轨迹驱动不同后端,读取并规范化事件、state、memory 和 summary,再输出可定位到具体字段的差异报告。
主要改动
RedisStorage配合fakeredis提供无网络 Redis 模式,覆盖 TTL、query 和资源关闭语义。一致性策略
自动生成 ID、运行时间和字典字段顺序等非业务信息会被规范化。
allowed_diff仅允许以下精确路径:$.session.last_update_time$.summary.summary_timestamp事件顺序、state、memory 内容,以及 summary 的 session 归属、文本、版本和覆盖关系仍进行严格比较,不会被模糊忽略。
验收结果
运行方式