== 投资顾问 Agent 端到端冒烟 @ http://127.0.0.1:8000 ==

前置：health ok · ready ok · redis=True

前置：已取得 advisor / compliance / analyst 三个令牌

种子事实：compliance_rule=55 · nav_dates=['2026-09-11', '2026-09-10', '2026-09-09'] · products=14

--- G1 ---
[  ok ] G1 鉴权与封套  advisor 登录签发 token  | token len=929
[  ok ] G1 鉴权与封套  未知账号 fail-closed  | 401 AUTH_401_UNKNOWN_ACTOR
[  ok ] G1 鉴权与封套  无 token 拒绝  | 401 AUTH_401_MISSING_DEBUG_HEADERS
[  ok ] G1 鉴权与封套  X-Trace-Id 透传  | header=e2e-trace-g1-echo body=e2e-trace-g1-echo
[  ok ] G1 鉴权与封套  统一 envelope {code,message,data,trace_id}  | keys=['code', 'data', 'message', 'trace_id']

--- G2 ---
[  ok ] G2 合规检测  安全文案 → INFO  | INFO hits=0
[  ok ] G2 合规检测  违禁文案(保本保收益) → BLOCK  | BLOCK action=modify_and_recheck hits=1
[  ok ] G2 合规检测  提示类文案(内幕消息) → WARN  | WARN hits=1
[  ok ] G2 合规检测  正则规则命中  | types=['regex']
[  ok ] G2 合规检测  返回 latency_ms 与命中位置  | latency_ms=5 hits=0
[  ok ] G2 合规检测  AI 语义层关闭时降级  | ai_analysis=null
[  ok ] G2 合规检测  空文本 → 422 校验  | HTTP 422
[  ok ] G2 合规检测  规则库读 advisor → 403  | 403 AUTH_403_PERMISSION
[  ok ] G2 合规检测  规则库写 advisor → 403  | 403 AUTH_403_PERMISSION
[  ok ] G2 合规检测  规则库读 compliance → 200  | total=55 items=5
[  ok ] G2 合规检测  规则库 severity 筛选  | n=37
[  ok ] G2 合规检测  规则库写 compliance → 200  | id=56 code=CR-DDFA35310769
[  ok ] G2 合规检测  规则库更新  | pattern/severity 已更新
[  ok ] G2 合规检测  规则库软删除  | is_active=false

--- G3 ---
[  ok ] G3 复制门闸  INFO + 合规 check_id → 放行  | track_id=track_de9973f3bc3c46acbb35ffcdd530710f
[  ok ] G3 复制门闸  WARN 未确认 → 40002 拦截  | 400 40002
[  ok ] G3 复制门闸  WARN 已确认 → 放行  | track_id=track_86063df912de4596b0dc58c65e3e4a97
[  ok ] G3 复制门闸  BLOCK 直接调用 → 40302 拒绝  | 403 40302
[  ok ] G3 复制门闸  check_id 与 hash 不符 → 40002  | 400 40002

--- G4 ---
[  ok ] G4 话术模板  列表 advisor → 仅已审核在用  | n=20
[  ok ] G4 话术模板  话术检索 → 200  | n=5 match_type=['hybrid', 'semantic']
[  ok ] G4 话术模板  Milvus 语义检索生效  | types=['hybrid', 'semantic']
[  ok ] G4 话术模板  检索缺 q → 422  | HTTP 422
[  ok ] G4 话术模板  新建 advisor → 403  | 403 AUTH_403_PERMISSION
[  ok ] G4 话术模板  新建含违禁文案 → 合规前置拦截  | 400 40002
[  ok ] G4 话术模板  新建 compliance → 200  | id=38 is_approved=False
[  ok ] G4 话术模板  更新模板  | version=2 is_approved=False
[  ok ] G4 话术模板  使用未审核模板 → 400 拒绝  | 400 40002
[  ok ] G4 话术模板  软删除模板  | is_active=false
[  ok ] G4 话术模板  使用已审核模板 → 200 + diff  | use_id=use_4d3e76c628744fee9c80f22861689627
[  ok ] G4 话术模板  is_modified 缺 modified_content → 422  | HTTP 422

--- G5 ---
[  ok ] G5 市场异动  基金行情 → 200  | nav=1.0 nav_date=2026-09-07 daily_return=0.0
[  ok ] G5 市场异动  不存在基金 → 40403  | 404 40403
[  ok ] G5 市场异动  history_limit 越界 → 422  | HTTP 422
[  ok ] G5 市场异动  异动扫描 → 200  | scanned=14 created=0 skipped=12 dup=2
[  ok ] G5 市场异动  异动扫描去重  | duplicated=2
[  ok ] G5 市场异动  异动列表  | n=2
[  ok ] G5 市场异动  异动解读 → 四段式  | used_fallback=False latency=1643
[  ok ] G5 市场异动  反馈 edit 缺 edited_text → 422  | HTTP 422
[  ok ] G5 市场异动  反馈 dismiss → dismissed  | status=dismissed
[  ok ] G5 市场异动  无异动记录基金 → 404  | 404 40401

--- G6 ---
[  ok ] G6 KYC 采集  建会话（名下客户）→ 200  | session=kyc_sess_e8ac740ce55b4a30ae7ee2d5aa26830c
[  ok ] G6 KYC 采集  越权建会话 → 拒绝  | 403 40302
[  ok ] G6 KYC 采集  Core 中不存在客户 → 拒绝  | 403 40302
[  ok ] G6 KYC 采集  对话采集推进进度  | node=basic_info parsed=['age', 'gender', 'marital_status'] pct=23
[  ok ] G6 KYC 采集  skip_to 回退节点  | node=basic_info
[  ok ] G6 KYC 采集  非法 skip_to → 422  | HTTP 422
[  ok ] G6 KYC 采集  对话注入拦截且不落库  | 400 40002 messages 4->4
[  ok ] G6 KYC 采集  查询会话详情  | status=in_progress turns=2
[  ok ] G6 KYC 采集  完成会话 → completed  | status=completed
[  ok ] G6 KYC 采集  重复完成 → 状态冲突  | 409 40901

--- G7 ---
[  ok ] G7 输入防护  正常内容 → passed  | action=passed
[  ok ] G7 输入防护  提示词注入 → 40002  | 400 40002 guard_type=prompt_injection
[  ok ] G7 输入防护  空内容 → 422  | HTTP 422

--- G8 ---
[  ok ] G8 桩路由  dashboard ping（仅桩）  | ready
[  ok ] G8 桩路由  allocation ping（仅桩）  | ready

--- G9 ---
[  ok ] G9 跨线回归  平台适当性未被顾问占用  | 200 {'match_result': 'allowed', 'mismatch_type': 'none', 'is_matched': True, 'blocked': False, 'requires_disclosure': False,
[  ok ] G9 跨线回归  问数线未被 script_template 重命名破坏  | 200


== 结果：63 PASS / 0 FAIL / 0 SKIP ==

报告已写入 D:\tmp\e2e-gap\_partc-advisor.md
