fix: harden long conversation continuity
Memind CI / Test, build, and release guards (push) Successful in 1m28s

This commit is contained in:
john
2026-07-27 21:39:34 +08:00
parent 5ae166fc44
commit 48c61a3279
16 changed files with 1635 additions and 94 deletions
@@ -27,6 +27,27 @@ npm run verify:mindspace-page-sync-guards
涉及 H5 交付时,还必须验证:未注册 dataset 时不产生可用 Page Data policy,且最终链接交付被拒绝或进入明确 repair 状态。
## Finish 异步收尾不得留下永久 preparing
Portal 的 session SSE 在收到 Finish 后会异步执行页面同步、HTML 守卫、Page Data
绑定检查和 delivery contract ready 标记。该收尾链路是幂等的;任一瞬时异常不得被
静默吞掉并把已完成页面永久留在 `preparing`
- `server/portal-session-routes.mjs` 必须对整段 Finish delivery finalization
执行有限重试,并记录包含 session 与 attempt 的警告
- 已产生本轮 public HTML 时,HTML 或 Page Data 守卫返回非 ready 也必须进入
有限重试;不能把 `limit``triggered` 等中间状态当成成功收尾
- `tkmind-proxy.mjs` 收到 SSE Finish 后必须先独立启动页面收尾,再执行计费;
重复计费或计费服务异常不得跳过 delivery finalization
- workspace-backed 资产版本使用稳定的 `workspace://` storage key;工作区文件更新
必须锁定资产并原位更新当前版本记录,禁止为同一 storage key 并发插入新 version
- 每次尝试必须成对调用 `beginSessionPageDelivery` /
`endSessionPageDelivery`,失败后不得遗留内存 busy 状态
- 只有 HTML 与 Page Data 两道守卫都通过,才允许调用
`markPageDeliveryContractReady`
- 回归用例:`server/portal-session-routes.test.mjs` 中的 transient
post-Finish failure retry 场景
## PostgreSQL 用户空间角色守卫
生产用户空间 PostgreSQL(独立于 Goose session PostgreSQL)通过 `SET LOCAL ROLE ms_u_*_agent` 隔离每个用户。必须保留以下约束: