Files
Agent-System/.doc/test-reports/2026-09-26-chat-semantic-replace-test-report.md
T

4.5 KiB
Raw Blame History

语义摘要 REPLACE fail-closed 灰度接线 测试报告

一、测试背景 (Background)

FEATURE-MATRIX chat-semantic-replace 行关闭条件:用户独立授权(本任务授权来源:用户会话指令明确要求完成本行,满足 Wave5 X-2 密封解封条件)+ fail-closed 灰度设计。此前 SEMANTIC_SUMMARY_REPLACE 密封不接线。

二、测试目标 (Test Objectives)

  1. fail-closed:master 开而 allowlist 空 → 不替换任何会话;任一校验失败(模型错误/超长/stale watermark)→ deterministic 保留
  2. 灰度:仅 allowlist 会话在 shadow 报告 OK 且 served watermark 一致时替换 served Narrative;Facts/计数保持 deterministic
  3. 回滚安全:替换后关闭开关,下一轮确定性再生成不含语义残留
  4. digest(每日纪要)保持 advisory-only

三、测试方案与环境 (Test Plan & Environment)

  • 单元:internal/ctxmgr/semantic_replace_test.go(7 用例:空 allowlist/命中/未命中/模型错误/超长/stale/flag 解析 + 回滚残留)
  • 工程:arch-check --mode block、go vet ./...、go test -short ./...(候选 cd1f846f、6004494e)
  • 运行时:本机 no-docker dev(bin/agent-server @ dev 6004494e;PI Runner MiniMax-M2.7-highspeed;产品 PI no-tool summarizer 由组合根注入)
  • 过程修复:dev localpg 的 chat_summaries.freshness_note/shadow_json 与 chat_summary_shadow_jobs 缺失(goose 62 版本已记但对象缺失的 schema 漂移)——按 62 号幂等 Up DDL 修复并留档

四、预期结果 (Expected Results)

用例 预期
单测矩阵(7+1) 全 PASS
allowlist 会话溢出窗口 source=semantic_replace、真实语义叙事、model=MiniMax
非 allowlist 会话 source=deterministic
回滚(replace off + 新轮) source=deterministic 且叙事无语义文本残留

五、实际测试结果与判定 (Actual Results & Evaluation)

5.1 单元/工程

  • go test ./internal/ctxmgr/ -run SemanticReplace:8/8 PASS(含回滚残留用例)
  • 既有密封负例 TestSemanticSummary_ShadowOKKeepsDeterministic(Replace:true 无 allowlist)保持 PASS——master 位单独打开不替换任何会话
  • sysadmin 目录断言更新为新契约(shadow/degraded + allowlist 键默认空)PASS;arch-check/vet/-short 全 PASS

5.2 dev 运行时阶梯(runtime-ladder.txt)

  1. 替换:sess-csr-hit2(allowlist)窗口溢出后 source=semantic_replace,served Narrative 为真实 MiniMax 语义叙事(“用户启动手持超声新项目…客户为华西医院,预算约500万…”),freshness_note 记录 semantic_replace: narrative replaced from MiniMax-M2.7-highspeed PASS
  2. 隔离:同配置 sess-csr-miss2 source=deterministic(shadow job 完成但未替换)PASS
  3. 回滚:重启 SEMANTIC_SUMMARY_REPLACE=false + 新增 15 轮 → rev5 source=deterministic,叙事为规则叙事(“双方开展了研发立项与合规细节沟通…”)无语义残留 PASS

5.3 过程缺陷与修复(运行时验证发现)

  • 回滚残留缺陷:确定性生成器合并 prior served 叙事(summarizer.go narrativeParts 以 oldSum.Narrative 起始),替换后回滚会把语义文本带入后续确定性叙事。修复(dev 6004494e):替换时将被换下的确定性叙事存入 shadow 报告 displaced_narrative(随 shadow_json 持久化);确定性合并遇 source=semantic_replace 优先取回 displaced 叙事。单测 TestSemanticReplace_RollbackLeavesNoResidue + 运行时阶梯 3 覆盖。

六、自动化测试套件汇总 (Test Suite Execution)

套件 结果
go test ./internal/ctxmgr/ ./internal/sysadmin/ PASS
arch-check --mode block / go vet / go test -short ./...(候选) PASS
dev 运行时阶梯(替换/隔离/回滚) PASS

七、测试结论与后续优化建议 (Conclusion & Next Steps)

结论:fail-closed 灰度设计已实现并经单元 + dev 真实链路验收——双开关(master + 会话 allowlist,默认全关)、四重前置校验(OK 报告/digest/watermark/长度)、Facts 与 digest 不变式、回滚无残留。默认关闭下零行为变化(负例保持)。FEATURE-MATRIX 行可升 done。

后续:放量阶梯 off → 白名单会话 → 更广,各环境开启需单独授权;chat_summaries 无外部读端点,验证经 DB/内部状态,后续可在管理台补只读视图。