Skip to content

feat: Session/Memory 多后端回放一致性测试框架 (issue #89)#178

Open
wzxsdf wants to merge 1 commit into
trpc-group:mainfrom
wzxsdf:feat/session-memory-replay-consistency-89
Open

feat: Session/Memory 多后端回放一致性测试框架 (issue #89)#178
wzxsdf wants to merge 1 commit into
trpc-group:mainfrom
wzxsdf:feat/session-memory-replay-consistency-89

Conversation

@wzxsdf

@wzxsdf wzxsdf commented Jul 13, 2026

Copy link
Copy Markdown

概述

实现一个可复用的回放一致性(replay consistency)框架:用同一组标准化 Agent 轨迹驱动 InMemory / SQLite / Redis 三个后端,经规范化比较事件、state、memory 与 Session Summary,自动生成可定位到 session_id / event_index / summary_id / field_path 的差异报告。它既是测试工具,也是后端实现质量的基准。

Closes #89

主要改动

replay harness(tests/sessions/replay/)

  • harness.py:ReplayCase/ReplayOp/ReplayBackend/ReplaySnapshot 数据模型 + replay_case() 驱动 + _DeterministicSummarizer(覆写 _compress_session_to_summary,跑 SDK 真实压缩流程、不调 LLM)
  • normalizer.py:占位符归一化(保留字段存在性)、剥离 temp: state、memory 确定性排序
  • comparator.py:单一递归 visit(),DiffEntry 内联定位字段
  • allowed_diff.py:JSONPath 精确匹配(token 化,避开 fnmatch 字符集陷阱)+ 强制 reason + 覆盖率治理(条数 ≤ 8、占比 ≤ 10%)
  • summary_checks.py:loss / overwrite / affiliation 三类专项 + 分词 Jaccard 语义相似度
  • injectors.py:快照层注入 + 端到端后端注入
  • report.py / backends.py:schema_version=3 报告 / 三后端实例化 + env 门控

replay case(replay_cases/cases.jsonl):10 条,覆盖 issue 全部 8 类场景(单轮/多轮/工具调用/state 覆写/memory 读写/summary 生成与更新/summary 截断/异常恢复)

报告产物:session_memory_summary_diff_report.json(schema_version=3)
设计文档:docs/superpowers/specs/2026-07-13-session-memory-replay-consistency-design.md

后端与运行模式

模式 后端 触发
轻量(默认) InMemory vs SQLite(:memory:) 默认,≤ 30s
SQL 集成 + 自定义 SQL TRPC_REPLAY_SQL_URL
Redis 集成 + Redis TRPC_REPLAY_REDIS_URL,未设置则 pytest.skip

三后端显式传同一 SessionServiceConfig(store_historical_events=True) 消除默认值差异;memory 三后端 enabled=True;不要求本地安装真实 Redis/MySQL。

归一化与比较策略

  • 归一化:timestamp / id / invocation_id 用占位符替换(保留字段存在性,优于 pop 删除);剥离 temp: state;memory entry timestamp 归一化 + 排序;long_running_tool_ids 的 None / 空集合统一。
  • 严格比较:事件顺序、state 值、function_call 参数、memory 内容、summary 的 session 归属 / version / 覆盖关系。
  • allowed_diff:JSONPath 精确匹配 + 强制 reason + 治理上限,绝不无脑忽略。
  • summary 三分:文本走分词 Jaccard 语义比较(纯标准库,无 embedding 依赖),元数据严格相等。

检出验证(两层)

  • 快照层:deepcopy 改字段,验证比较器 + summary_checks 检出率(8 类不一致,覆盖 event/state/memory/summary)。
  • 端到端后端注入:跑完 case 后直接 UPDATE events SET author=... / 改 Redis key,重新 get_session 读出,验证 harness 对真实后端数据漂移的感知能力。

验收映射

# 验收点 落点
1 InMemory + 持久化对比 默认 InMemory vs SQLite
2 10 case 100% 检出注入 test_each_case_detects_injection + 8 类 kind + 端到端 SQL/Redis
3 误报率 ≤ 5% 正常 8 case FPR = 0
4 summary 三类 100% 检出 loss / overwrite / affiliation 各注入断言
5 报告定位字段 DiffEntry 含 session_id/event_index/summary_id/field_path/双后端值
6 轻量 ≤ 30s + env 开/跳 实测 ~7s;Redis env 门控

本地验证

结果
通过 30 passed
跳过 1(Redis,需 TRPC_REPLAY_REDIS_URL)
耗时 ~7s
lint yapf + flake8 通过

- replay harness: 同一组轨迹驱动 InMemory/SQLite/Redis,比较事件/state/memory/summary
- 归一化(占位符,保留字段存在性)+ JSONPath 精确 allowed_diff + 覆盖率治理
- summary: SDK 确定性模型 + 三分比较 + loss/overwrite/affiliation 检测
- 检出验证: 快照层注入 + 端到端后端注入(改 SQL 行 / Redis key 重读)
- 实测发现 SQLite summary 持久化 drift,标 KNOWN_DRIFT 只报告不改
- 29 tests pass, 1 skipped (Redis 需 TRPC_REPLAY_REDIS_URL)
@wzxsdf

wzxsdf commented Jul 13, 2026

Copy link
Copy Markdown
Author

I have read the CLA Document and I hereby sign the CLA

@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (main@e113610). Learn more about missing BASE report.

Additional details and impacted files
@@            Coverage Diff             @@
##             main        #178   +/-   ##
==========================================
  Coverage        ?   87.55867%           
==========================================
  Files           ?         467           
  Lines           ?       44103           
  Branches        ?           0           
==========================================
  Hits            ?       38616           
  Misses          ?        5487           
  Partials        ?           0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

构建 Session / Memory 多后端回放一致性测试框架

1 participant