ソースを参照

docs: README 补上 20260921 / 20260922 两天的改动记录

README 的按日期改动记录此前停在 20260920,09-21 与 09-22 两天的改动只记在
harness/progress.md 里 —— 而 README 是**入库**的、团队 clone 后看得到的那份。
按原有格式补两节:

20260921:卡片改为正文开流前上屏;修「同一段内容出现两次」;参考资料改为正文定稿就上屏;
修「收尾时视图被拽回回答顶部」;大块内容改为对齐顶部;「草稿被整段替换」记为已接受行为;
DMS token 免手填(.dms-token + 自动续期);注释掉测试用 MOCK 按钮组。

20260922:1887 写入企业字段(含登录态优先、认领行保护、读侧排除访客行);
访客归属改用本机 IP(新增取 IP 接口 + 同源代理);复制去掉 markdown 语法符号;
记录 DMS「未知列会让 updateContent 静默丢弃整个更新」这个坑。

Co-Authored-By: Claude Code <noreply@anthropic.com>
gongtianxiao 1 ヶ月 前
親
コミット
1dad4ea1a9
1 ファイル変更、43 行追加、0 行削除
  1. 43 0
      README.md

+ 43 - 0
README.md

@@ -297,3 +297,46 @@
   - 用户主动**停止保留已流出文字**;后端出错 / 断流**撤掉未定稿的草稿**
   - 旧后端(不下发流式事件)与 mock 测试按钮**仍走原来的打字机**(回归重点)
   - 新增 `verify-answer-stream.mjs`(78 项:纯逻辑 + 协调器级假流)、`probe-answer-stream.mjs`(真后端探针)
+
+## 20260921
+
+- **卡片改为「正文开流前」上屏**(对齐后端契约 F079):有入选政策时后端先发完完整的 `source`/`item`
+  才开始 `answer_start`,而前端此前一直等 `done` 才显示卡片 —— 只能靠整块重写把卡片插到正文之上,
+  界面上表现为「正文先渲一遍、又从头再渲一遍」。现在开流前就把卡片上屏,收尾只做纯追加
+- **修「同一段回答内容出现两次」**:真载荷实测 `answer_end.text`(1610 字)比增量拼接(1309 字)
+  **多 301 字**,导致应用侧记录的"流式正文"不再是上屏内容的后缀 → 重排落兜底分支 → 正文上屏两份。
+  修法:`answer_end` 后同步"流式正文",并加固兜底(对不上时**绝不重复插入正文**)
+- **参考资料改为「正文定稿就上屏」**:实测 `done` 要等 `result`(375~390KB 的完整快照),
+  比正文定稿晚 **3~10 秒**,而参考资料的数据(`source` 事件)在正文开流前就发完了 —— 等于白等。
+  现在正文一定稿就发;二维码(来自 `result.cipa`、只能等)走定向重排,保住「在参考资料之前」的版式
+- **修「文字快渲染完时视图被拽回回答顶部」**:流式期间正文是即时渲染的,但最后一行一直被标成
+  "打字未完成",收尾时整套打字机机制被重新启用,其中一环会把视图滚到最后一条 AI 消息的顶部。
+  修法:收尾时把已在屏幕上的行补记为「打字完成」
+- **大块内容改为对齐它的顶部**(不再滚过它):卡片/参考资料是一整块插入的(300~900px),
+  此前贴底滚动会一步滚过整块 —— 用户刚拿到卡片却看不到卡片
+- **「流式草稿被最终文本整段替换」记为已接受行为**:契约要求「完整校验后绑定真实链接,
+  随最终替换出现」「不能用 text 覆盖…不能只保留草稿」。实测草稿与最终文本的公共前缀只有 11.7%
+  (最终版给标题补了序号、把纯文本换成 markdown 链接)
+- **DMS token 不用再每次手填**:token 约 24 小时过期,以前要「改 .env + 重启 dev server」。
+  现在放在本机单行文件 `.dms-token`,代理**每个请求现读**(换 token 不用重启):
+  `npm run dms:token`(从剪贴板读)、`npm run dms:login`(账号密码自动登录)、
+  `npm run dev` 前自动续期。顺带发现原来 `.env.development.local` 里的 token 写在了**下一行**,
+  dotenv 读出来是空串 —— 等于一直没生效
+- 注释掉输入框右侧的测试用 MOCK 按钮组(资料/问卷/流测/回放/打字/Scope/测试输入)
+
+## 20260922
+
+- **1887 助手会话写入企业相关字段**(未登录也写):企业名称、统一社会信用代码、企业图片、是否登录
+  - 规则:**登录态的值优先级最高**(库里已有值也覆盖);对话带出的 `company_info` 值**与库里不同就更新**;
+    但**已被登录态认领过的行**(`c_is_login="1"`)不许被后来的访客对话改写 —— 否则会把这行改到别的公司名下
+  - **企业看不到陌生访客的会话**:读「我的会话」时排除访客行(改造前访客标识是随机的、本来也匹配不上,
+    这里只是保持一致的可见范围)
+  - `c_title` 不写(标题由运营侧生成);DMS 系统字段 `title` 只在建行那一刻带上
+- **访客归属改用本机 IP**:新增取 IP 接口(返回纯文本 IP;**走同源代理** —— 它是 HTTP 而页面是 HTTPS,
+  直连会被浏览器按混合内容拦掉),IP 存进 `c_ip`,访客身份为 `访客_<IP>`;
+  取不到 IP 时退回浏览器随机 id,不影响任何写入
+- **复制回答去掉 markdown 语法符号**:`###`、`**`、反引号、`[文字](链接)` 的括号语法、无序列表的 `- `
+  都不再复制出去;**有序列表序号保留**(顺序是内容)、**链接地址保留**(写成「文字(地址)」)
+- 排查中撞到一个 DMS 协议坑并记录:payload 里含模型里**不存在**的列时,`addContent` 会忽略该列照写,
+  而 `updateContent` 会**静默丢弃整个更新**(返回仍是 `{"code":200,"message":"成功"}`)——
+  新增列时必须先确认 DMS 侧已加