Files
memind/docs/regression-guards/mindspace-publish-and-chat-finish.md
john 98721371a4 fix(mindspace): edit_file 落盘、Finish 聊天 merge 与回归守卫
- finish-sync 支持 edit_file 覆盖 public HTML
- Finish 同步 merge 本地流式消息,剥离 agent 内部前缀
- 新增 verify:mindspace-publish-guards 与 AGENTS.md 跨工具说明
- 发版脚本接入回归门禁;103 runtime 发布含备份回退

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 00:27:15 +08:00

84 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MindSpace 发布与聊天 Finish 回归守卫
> **状态:已验证(2026-06-29)— 请勿在未更新测试/verify 的情况下删改下列行为。**
本页记录两类好不容易调通的行为,以及如何用自动化手段防止后续「优化」误覆盖。
## 1. 公开 HTML`edit_file` 必须落盘覆盖
### 症状
- Agent 用 `edit_file` 改已有 `public/*.html` 后,链接仍是旧内容
- 不是缓存,是磁盘文件未被覆盖
### 必须保留
| 位置 | 行为 |
|------|------|
| `mindspace-public-finish-sync.mjs` | `edit_file` 读取 baseline + `old_str`/`new_str` patch,再 `writeFileSync` 覆盖 |
| `server.mjs` | Finish / SSE 流式事件调用 `materializePublicHtmlWritesFromSessionEvent` |
### 守卫
- 单测:`mindspace-public-finish-sync.test.mjs`
- 源码 + runtime`npm run verify:public-finish-sync-runtime`
---
## 2. 聊天 Finish:禁止清空对话 / 禁止暴露内部前缀
### 症状
- 流式过程正常,**Finish 瞬间**聊天框刷新,只剩 1 条 user 消息
- 该消息露出 `【TKMind 路由提示】``static-page-publish` skill 前缀等 **Agent 专用文案**
- 历史记录里仍有完整对话 → 说明是 **前端 Finish 同步** 问题,不是 Goose 丢数据
### 必须保留
| 位置 | 行为 |
|------|------|
| `src/hooks/useTKMindChat.ts` | `syncSessionMessages``mergeConversationSnapshot`,**禁止**盲覆盖;服务端条数不足时按 `FINISH_SYNC_RETRY_DELAYS_MS` 重试 |
| `server.mjs` | Session snapshot 缓存仅在 `hint_mc` **且** `hint_ua` 均提供且匹配时命中 |
| `conversation-display.mjs` + `src/utils/message.ts` | 用户消息无 `displayText` 时,用 `deriveUserFacingText` 剥掉 routing / skill / 用户身份前缀 |
| `chat-finish-sync.mjs` | 纯函数 merge 逻辑(被 TS 与单测共用) |
### 守卫
- 单测:`chat-finish-sync.test.mjs``conversation-display.test.mjs`
- 源码静态检查:`npm run verify:chat-finish-sync`
- 文档:本文件
---
## 发版 / CI 必跑命令
```bash
# 专项回归(单测 + 源码守卫)
npm run verify:mindspace-publish-guards
# 发版 Portal runtime 后(含 bundle 检查)
npm run verify:mindspace-publish-guards:full
```
`scripts/release-portal-runtime-prod.sh``scripts/release-prod.sh` 在未 `--skip-tests` 时会调用上述 verify。
---
## 修改这些区域时的 checklist
- [ ] 是否仍 merge 本地与服务器消息(Finish / UpdateConversation)?
- [ ] 是否仍过滤/剥离用户消息中的 agent-only 前缀?
- [ ] `edit_file` 是否仍会 materialize 到 `MindSpace/<userId>/public/`
- [ ] 是否已跑 `npm run verify:mindspace-publish-guards`
- [ ] 是否更新了本页或相关单测?
---
## 相关 Cursor 规则
`.cursor/rules/mindspace-publish-chat-finish-guards.mdc` — Cursor 在编辑相关文件时自动提示上述约束。
## 其它 AI 工具(Codex / Cloud 等)
**不会**自动读取 `.cursor/rules/`。请改为阅读仓库根目录 **[AGENTS.md](../../AGENTS.md)** 与本目录文档;verify 与单测对所有工具同样有效。