revert(过度矫正): 撤回"目录合不合法"的两道门槛 —— 错在投递,不在值

用户否掉了我上一步的方向:「?拒收那个目录干啥?明明是你的网关投递逻辑造成的错误」。

他是对的。/home 是**合法目录**,平台不该替用户裁定"哪个目录算工作目录":
网关地址受理处的 400、建议接口的过滤、桥侧的同类闸(revert 141003d)全部撤回。
判据随之删除 —— 判据不该给错误的实现护航(那会让错的东西看起来有保障)。

保留的是**真修复**(ad1f3f1,已在线):
- 会话解析按 (path, 别名):错投的根因是解析只看别名、path 被当提示;
- 唯一索引 (path, 别名);无 path 时"唯一才认,否则报歧义";
- 毒数据清理(/home 污染值 0|0|0)。
核心回归判据 TestFindNamedSessionForRequiresPath 保留。

仍未修(用户指的那一处):SSE 投递只按 name 广播 —— 同名不同 path 的客户端谁接到谁处理。
下一 commit:投递也带会话身份,只投给声明了该会话的客户端。
This commit is contained in:
2026-09-15 12:54:25 +08:00
parent 82c51e7a8e
commit 7e1adfd731
3 changed files with 8 additions and 88 deletions

View File

@ -86,22 +86,6 @@ func resolveTarget(r *http.Request, addr models.Address, replyTo, fromAgent, sub
return mail.SessionID, &replyID, false, nil
}
// 地址里的 path 必须**像一个工作目录**(用户 2026-09-15 报的严重 bug)。
//
// 实情:客户端把收件人的 path 填成了 `/home`,于是链条一路跑通:
// 会话 workspace=/home → 桥按来信的 to_workspace 起 worker(实测 cwd=/home)
// → 那个 worker 发的信继续带 /home → 建议接口把 /home 学成第一条候选 → 自我强化。
// 后果不只是地址难看:两条不相干的线索会落进同一条会话、同一个 pi 会话文件。
//
// 拒收而不是"悄悄改成默认目录":path 是会话身份的一半,猜一个等于把信
// 放进另一条会话里 —— 那正是要修的毛病。文案给出可执行的下一步。
if addr.Path != "" && !repo.IsPlausibleWorkspace(addr.Path) {
return uuid.Nil, nil, false, errBadRequest(fmt.Sprintf(
"地址里的 path 不像工作目录:%q。地址形如 name@/绝对/路径.<会话别名>;"+
"新建会话可写 name@<工作目录>.new,人类回信可省略 path(name@.<别名>)。",
addr.Path))
}
switch addr.Mode() {
case models.SessionNew:
// 新建会话:若调用方给了别名,当场命名,之后即可用 name@path.<alias> 续谈。