dsh
60012ede3d
fix(homeagent桥): ★ read_thread 不传 offset 时 URL 拼成 /thread&session_id ⇒ 100% 404
症状:模型默认不传 offset ⇒ offset="" ⇒ scopeQuery("&") 拼出
/agent/mail/{id}/thread&session_id=…
`&` 被当成路径的一部分,网关路由 /agent/mail/{id}/thread 匹配不上 ⇒ 404。
根因:2a5e3d7(09-14「四家桥的读端点也带上会话收窄」)只给 read_thread 拼错了
分隔符;其余四家桥走 `path.includes('?') ? '&' : '?'`,没踩到。
★ 网关日志里的单字符对照实验(09-30 10:14:47,同一 mail_id、同一 session_id 值、
相隔 0 秒的两条请求,只差分隔符):
/thread?session_id=x -> 401 86B ← 已路由进 handler,只是鉴权没过
/thread&session_id=x -> 404 19B ← 从未匹配到路由
同一 session_id、同样缺 workspace,唯一变量是 ? / &。09-29 的三次 404
(20:21:12 / 20:58:14 / 21:44:42)URL 形态一致,且**不伴随** [agent-scope]
「没声明 session_id」告警 ⇒ session_id 确实带上了,问题在分隔符。
为什么「同一二进制 09-29 全 404、09-30 全成功」不是矛盾:该缺陷只在
currentSessionID != ""(即正在处理某轮邮件)时触发。09-30 那三次读发生在回合外,
scopeQuery 返回空串、不追加分隔符 ⇒ 路径正确 ⇒ 200(网关日志有 [agent-scope]
「旧语义放行」告警为证)。所以它恰好只在**邮件回合内**发作 —— 即需要读线索
才能回信的那条路径。
修法:sep := "?" ; if offset != "" { sep = "&" }。
不能只把 "&" 改成 "?" —— offset 自带 "?offset=%d",一刀切会把分页那条从对的改错。
两条路径都在 plugin_read_thread_path_test.go 里逐字断言路径 == 网关路由。
自证边界(改完仍无法自证的部分):单测证明的是**拼出的 URL 落在网关路由上**,
不等于已在 homeagent 部署的那份 plugin.bin 上端到端复现过。原守卫测试
(plugin_read_scope_test.go)断言的是「URL 里有没有 session_id=」,缺陷 URL 里
恰恰有 ⇒ 绿着放行;新测试把判据落在 u.Path 上。
2026-09-30 10:40:44 +08:00
..
2026-09-06 15:18:06 +08:00
2026-09-06 15:18:06 +08:00
2026-09-06 15:16:49 +08:00
2026-09-06 15:16:49 +08:00
2026-09-14 16:54:30 +08:00
2026-09-12 17:38:32 +08:00
2026-09-28 09:40:34 +08:00
2026-09-26 09:18:39 +08:00
2026-09-04 20:33:44 +08:00
2026-09-04 20:33:44 +08:00
2026-09-03 12:57:43 +08:00
2026-09-14 16:38:28 +08:00
2026-09-06 19:23:42 +08:00
2026-09-14 16:27:02 +08:00
2026-09-14 23:18:12 +08:00
2026-09-30 10:40:44 +08:00
2026-09-14 12:07:45 +08:00
2026-09-14 08:17:23 +08:00
2026-09-26 09:18:39 +08:00
2026-09-14 16:27:02 +08:00
2026-09-06 15:16:34 +08:00
2026-09-06 15:16:34 +08:00
2026-09-04 23:52:52 +08:00
2026-09-04 23:52:52 +08:00
2026-09-04 13:49:16 +08:00
2026-09-26 09:18:39 +08:00
2026-09-30 10:40:44 +08:00