JianFeeeee
1de93feabc
fix(桥): 「读不出来」被当成「不存在」—— 这一行把 dsh 的邮件通道整条弄断
`persistedCwd()` 原来是 `catch { return undefined }`,把 readSession 的**三种**
抛出情形压成同一个「磁盘上没有」。调用方只把 `undefined` 读作"可以 create":
读失败(格式迁移拒绝 / 日志损坏)→ 当成不存在 → 走 create
→ 磁盘上**确实有**那个 id ⇒ `session "…" already exists`
⇒ 该会话的邮件全投不进去,而日志里只有 create 的错,
**真正的读失败被那个 catch 吃掉了**。
2026-09-19 DSH 升到 0.1.5-rc.2 后 40 个 `mail-*` 会话全部命中。
修法:`readSession` 的报错**本来就带可区分的 code**
(`dsh-session-query` 的 `notFound()` 给 `SESSION_QUERY_SESSION_NOT_FOUND`;
格式/损坏给 `SESSION_QUERY_CORRUPT_SESSION` / `SESSION_QUERY_PERSISTENCE_FAILED`)。
现在**只有 `SESSION_QUERY_SESSION_NOT_FOUND` 返回 `undefined`**,其余一律抛出,
让原文错误浮到调用方 —— 不再降级成"不存在"。
判据 `test/persisted-cwd-not-found.test.mjs`(2 条,已进 `npm test` 门禁)钉的是
**区分本身**,不是"有没有 try/catch"。三个变异逐个验过:
① catch 改回无条件 `return undefined` ⇒ 红
② 任何抛错都返回 undefined ⇒ 红
③ `throw e` 提到 code 判断之前("不存在"也抛 ⇒ create 不可达)⇒ 红
★ 变异③第一次**没落在目标上**:全局正则命中了文件里第一个无关的
`catch (e: any)`,判据全绿 —— 于是把它写成自检里的一条断言(变异必须真的落下),
避免这条自检本身变成恒真的假判据。
顺带记两个事实:
- `src/index.ts` 是桥的真源,`dist/` 是部署产物(`.gitignore` 忽略);已 `tsc` 重建并在产物里复验。
- 姊妹桥(pi/opencode/zcode)不含 `persistedCwd`,本缺陷只在 dsh 这条链上。
2026-09-25 04:15:37 +08:00
..
2026-09-25 04:15:37 +08:00
2026-09-14 23:18:12 +08:00
2026-09-14 23:18:12 +08:00
2026-09-18 07:19:26 +08:00
2026-09-14 23:18:12 +08:00