Files
Agent-System/.doc/test-reports/2026-09-15-multi-intent-u2-segmenter-test-report.md
T
weichenandCursor c2e79c8a1d docs(test): record U2 rule segmenter shadow proposal report
Close the U2 checklist with golden/hard-negative evidence while keeping production routing unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 23:17:45 +00:00

7.1 KiB
Raw Blame History

多意图 HITL U2 规则分段与 shadow 提案 测试报告

一、 测试背景 (Background)

U1 已冻结 app/intentflow 契约与默认 legacy tier。生产路径仍由 plan_builder 最多拆两段查询,写意图直接丢弃。U2 要在不改 TopIntent / 现有 IntentPlan 路由的前提下,用纯规则分段器生成 2–4 步 PlanProposal,并把写段、指代、红线、超限记录进 shadow,供后续 intentflow 消费。

二、 测试目标 (Test Objectives)

  • 连接词 / 句号 / 分号 / 换行 / 序号 / 「先…再…最后」能拆出 2–4 段
  • 「查询并总结」内部链不拆;5 段不截断而是 rejected_batch_size
  • 写段进入提案且 ComboHint=needs_confirm;生产 IntentPlan 仍为 nil
  • 指代 → needs_clarify;红线 → 整句 rejected
  • 同输入 digest 稳定;反事实 auto_read 错误自动执行 = 0
  • intent -> maturity 保持;coordinator / chat 无回归
  • 无运行时路由变更,因此不做真实 PI / 浏览器验收

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

项 值
OS Linux 7.0.0-31-generic
Go go1.27.1 linux/amd64
分支 feature/multi-intent-u2-segmenter(从本地 dev@8ac3d3f 检出)
Schema 43(本单元不迁移)
容器 不 rebuild
项目 143 只读
证据 .doc/test-reports/assets/2026-09-15-multi-intent-u2-segmenter/

测试层级:characterization(legacy IntentPlan)/ 分段器单测 / PlanProposal + golden eval / go test -short ./...。无 PG 集成、无真实 PI。

四、 预期结果 (Expected Results)

用例 判定
「查风险,然后查法规」 生产 IntentPlan 仍为 2 步 query;提案 read_only,反事实 would_execute
「查法规然后生成报价单」 生产 IntentPlan=nil,TopIntent 仍为查询;提案含写段、needs_confirm、would_confirm;shadow LegacyDroppedWrite=true
「查询并总结」 不分段;生产无 multi-intent plan;提案 single / would_passthrough
「然后再看一下它的适用范围」 needs_clarify / would_clarify
「然后修改我的工号」 整句 rejected / would_reject
5 段编号 分段器保留 5 段;提案 rejected_batch_size,不静默截成 4
同输入 digest SHA-256 稳定
golden v1 denom=8 false_auto_execute=0
arch-check block production gate passed
全仓 short PASS

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

5.1 characterization:生产路由不变

  • 测试输入 (Input):go test -count=1 ./internal/intent -run 'TestLegacyIntentPlan|TestLimitedIntentPlan_QueryThenQuery'
  • 实际输出 (Actual Output):
--- PASS: TestLegacyIntentPlan_WriteComboStillDropped (0.00s)
--- PASS: TestLegacyIntentPlan_NoConnectorStaysSingle (0.00s)
--- PASS: TestLimitedIntentPlan_QueryThenQuery (0.00s)
ok  	chat-agent-system/internal/intent	0.012s
  • 评价判定 (Evaluation / Verdict):PASS。写组合生产 IntentPlan 仍为 nil;「查询并总结」不产生 legacy 计划;双查询仍是 2 步 IntentPlan。
  • 性能与耗时 (Duration & Latency):约 12ms

5.2 分段器 golden

  • 测试输入:go test -v -count=1 ./internal/intent -run TestSplitPlanSegments
  • 实际输出:
--- PASS: TestSplitPlanSegments_ConnectorAndNumbered (0.00s)
--- PASS: TestSplitPlanSegments_PeriodAndSemicolon (0.00s)
--- PASS: TestSplitPlanSegments_InternalChainNotSplit (0.00s)
--- PASS: TestSplitPlanSegments_FirstThenFinally (0.00s)
--- PASS: TestSplitPlanSegments_FiveNumberedKeptIntact (0.00s)
  • 评价判定:PASS。连接词、编号、「先再最后」、句号/分号均可拆;内部链保持 1 段;5 段不被截断。
  • 性能与耗时:<10ms

5.3 写段进入提案且路由不变

  • 测试输入:查一下相关法规,然后帮我生成报价单
  • 实际输出:见 proposal-verbose.txt
--- PASS: TestPlanProposal_WriteNotDroppedAndLegacyUnchanged (0.00s)

断言:IntentPlan==nil,TopIntent=QUERY_REGULATIONS,提案 ≥2 段,ComboHint=needs_confirm,LegacyDroppedWrite=true,CounterfactualAutoRead=would_confirm。

  • 评价判定:PASS。提案层不再静默丢写段;生产路由未改。
  • 性能与耗时:<10ms

5.4 指代 / 红线 / 批量上限 / digest

  • 测试输入:对应 TestPlanProposal_AnaphoraClarify、SecurityRejectsWhole、BatchSizeRejected、DigestStable
  • 实际输出:
--- PASS: TestPlanProposal_AnaphoraClarify (0.00s)
--- PASS: TestPlanProposal_SecurityRejectsWhole (0.00s)
--- PASS: TestPlanProposal_BatchSizeRejected (0.00s)
--- PASS: TestPlanProposal_DigestStable (0.00s)
  • 评价判定:PASS。指代澄清、红线整句拒绝、5 段 rejected_batch_size、digest 稳定。
  • 性能与耗时:<10ms

5.5 golden eval 与反事实安全

  • 测试输入:internal/intent/testdata/plan-proposal-eval-v1.json(denom=8)
  • 实际输出:
    proposal_test.go:221: plan-proposal eval denom=8 false_auto_execute=0
--- PASS: TestPlanProposalEvalGolden (0.00s)
--- PASS: TestPlanProposal_HardNegativeNoFalseAutoExecute (0.00s)
  • 评价判定:PASS。写/红线/指代/超限均不会被反事实判成 would_execute。ComboHint 只是结构提示,不是授权。
  • 性能与耗时:<10ms

5.6 边界与全仓 short

  • 测试输入:go vet ./...;./scripts/arch-check.sh --mode block;unset TEST_DATABASE_URL; go test -short -count=1 ./internal/intent ./internal/coordinator ./internal/chat ./internal/archtest ./internal/app/intentflow;go test -short -count=1 ./...
  • 实际输出:go vet 无输出。arch-check block: production gate passed。包级见 unit.txt;全仓见 short.txt。internal/server 9.687s;全包 ok。
  • 评价判定:PASS。intent -> maturity 保持;L1 未 import intentflow。coordinator / chat 无回归。
  • 性能与耗时:全仓 short 约 12s

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

命令 结果
go vet ./... PASS
go test -count=1 ./internal/intent -run 'TestSplitPlanSegments|TestPlanProposal|TestLegacyIntentPlan' PASS
go test -short -count=1 ./internal/intent ./internal/coordinator ./internal/chat ./internal/archtest ./internal/app/intentflow PASS
go test -short -count=1 ./... PASS
./scripts/arch-check.sh --mode block PASS

通过率 100%。未跑 PG / 真实 PI(本单元无副作用路径)。

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

U2 达到合入标准:规则分段与 shadow PlanProposal 落地,生产 TopIntent / IntentPlan 不变,反事实错误自动执行为 0。

后续:U3 在独立分支 feature/multi-intent-u3-intentflow-pg 建 intentflow owner、PG schema、CAS/lease/fencing;不得把 HITL/tier 回灌 ActionRegistry,也不得把 shadow 提案当作生产 IntentPlan。