# 私聊、群聊：添加长文

## 本轮范围

- 输入框“＋ → 写长文”改为“添加长文”，先打开选择器，不创建云端记录。
- 列出自己创建的长文，支持搜索、分页、只读全文预览、单选确认。
- “新建长文”复用现有编辑器，完成按钮为“添加到待发送”，仅保存本地草稿。
- 选中或新建后在输入框显示待发送卡片；只有点击发送（或输入框中 Enter）才发送。
- 长文独立发送；原输入框中的文字、提及、附件不消费、不清空。卡片明确提示此行为。
- 待发送状态按环境、账号和会话隔离；发送失败保留内容与稳定提交标识，重复点击不重复发起。
- 离开或切换会话时关闭长文选择器及其子编辑器；返回原会话不会自动重开。已添加的待发送长文、原文字及附件保留，只有再次点击才打开选择器。
- “发给自己”和主题原有的“写长文”流程保持不变。

## 复用的能力

选择器使用既有 `search.scene(long_article)` / `search.records` 分页，按 owner/creator 过滤；没有新增后端 HTTP 接口。

插件新增只读操作 `source.long-article.own`：核对当前账号，使用记录详情验证所有者与创建者，返回完整正文和现有格式的签名转发引用。搜索摘要不能作为发送正文。

已有文章经 `source.forward-messages` 发送，保留既有转发语义和原文引用。新增可选 `expectedUserId`、`sendAtMillis` 用于账号隔离与稳定重试。新文章经现有 `source.long-article.publish` 发送，复用稳定 record/relation 标识和图片处理。

发送后清理编辑器草稿使用可选 `expectedRecordUid`，由本地状态存储原子检查，避免删除另一个窗口后续保存的草稿。选中卡片保存在浏览器本地；浏览器禁止存储时退化为当前页面内保留。

## 验证与边界（2026-09-19）

- 构建、类型检查通过。
- 14 个相关测试文件共 540 项通过。
- 真实私聊/群聊组件新增流程测试 2 项通过，验证选中不发送，显式发送后文字和附件仍保留。
- 隔离浏览器验证通过：明暗模式、360/640 像素窗口、搜索、分页、预览、创建后仅待发送；全部网络请求使用合成响应，没有给真实联系人发送消息。
- 完整对话回归：327 项通过、2 项失败。两项失败均来自此前已有的 `mention-read-status.tsx` 空 scope 读取 `sourceRef`，已与修改前基线对照，本轮未修改该逻辑。
- 固定 Web 预览仍为 `http://127.0.0.1:3098/`，只更新 `/tmp/arkme-membership-0918-ru7UEP` 隔离插件运行环境。未改动原生 Arkme 客户端、未占用其端口。
- 上述初次验证时预览未登录。09-19 补测已恢复现有登录，真实本人长文列表、分页、标题搜索、详情核验、选择待发送及移除通过；没有触发真实转发/发布。见 [集中回归记录](desktop-regression-2026-09-19.md)。

### master 整合后的退出回归

- 2026-09-19 补回长文弹窗的消息鉴权引用、格式和内容块类型字段，保留 master 收到长文的鉴权与 Markdown 图片显示。
- 更新旧长文入口测试后，发现新增选择器退出会话时只隐藏、未清空打开状态，返回时会自动重开。经确认在会话退出及会话身份切换两处清理选择器状态，不删除草稿或待发送内容。
- 6 个相关测试文件、357 项通过，包括私聊/群聊退出与返回、子编辑器关闭、待发送长文及文字/附件保留、显式发送，以及上游收到长文读取。类型检查和完整构建通过。
- 本轮仅本地源码验证，未更新或重启固定 3098 预览及已安装 Arkme 客户端；不将组件测试标为最新登录浏览器或真实发送验收。
