Files
ycode/docs/对话输入统一对齐实现与验收-2026-10-21.md
T

65 lines
8.5 KiB
Markdown
Raw 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.
# 对话与输入统一对齐:实现与验收
基线:`771ca540f71b387d11865bc5c07f7d4f4d8b6ecf`。工作分支:`workbuddy/alignment-2026-10-21`。
本次为十项方案的本地代码实现及可执行回归,**不是 WorkBuddy 当前版本完整 1:1 / Windows / 像素验收**。未推送、发布、安装覆盖用户应用,也未使用 Codex 云任务或 CLI。
## 十项交付矩阵
| 范围 | 已实现 | 已验证与保留边界 |
|---|---|---|
| 会话加载 | 新任务与已有空会话分离;无缓存两组骨架、标题占位、淡出;缓存优先;失败重试;重复选择不刷新;发送 readiness 门禁 | 状态测试覆盖乱序切换、恢复、缓存、失败、重试。10,000 条历史约 748 KB 的 Node 解析/状态注入测量约数毫秒;不代表浏览器渲染或 Windows IPC 性能,无据不做性能重写 |
| 模型选择 | 展示/发送共享有效模型解析;无模型阻止发送;新增自动默认和当前任务下一请求选择;编辑保留;删除清理无效引用;模型 ID 重命名映射;异步保存绑定会话/草稿身份 | 离线模型注册表/前端状态回归;历史消息快照不改写。无 config 的新安装不再合成 deepseek;仅迁移显式旧模型配置 |
| 权限首发 | 会话创建带 permissionMode 并校验;发送直接取权威保存值;模型/权限/模式保存序列化;失败不默默按旧高权限发送 | 首发完全访问、已有会话、模式进出及等待保存测试;内核真实工具授权尚见下文 SDK 边界 |
| 模式输入栏 | plan/ask Chip、清除回 craft、插槽顺序、权限禁用且关闭浮层;plan 有效显示默认权限,保留原偏好,ask 禁改 | 状态/SSR 回归。Chip SVG 为本地几何,不谎称原版 SVG 已恢复;同版本原版图标、字体和宿主差异待 REA |
| 局部过程分组 | 至少两项连续过程各自成组,后续正文/终态触发局部折叠;尾段独立;保留特殊节点 | 同轨迹、多组、正文锚点及展开顺序回归 |
| 底部运行状态 | 共享 progress 事件、真实准备/思考/工具/等待问答/等待授权/收尾;恢复快照、序号及终态清理;reasoning-only、tips 延迟/轮换/独立悬停与焦点暂停/关闭 | 纯事件与 DOM 行为测试;无云启动/网络恢复/credit 数据源,未伪造这些分支或静默超时;原版文案优先级全状态仍待 REA |
| 提问与已答记录 | 分页、键盘/焦点、补充、多选、跳过、重复提交、失败重试、IME、旧计时器隔离;工具关联投影去重;缺失位置的历史明确标识 | 18 项 jsdom 行为及投影/SSR;真实浏览器布局/焦点待验 |
| 完成折叠 | 默认完成/取消耗时块;外层/局部/工具/思考独立状态;展开原始记录顺序;真实终态时间,不冒用创建时间 | 完成展开/局部切换、消息 footer 回归;历史无终态时间则不伪造 |
| 工具授权及会话允许 | 输入区宽卡、真实工具/命令/目标/原因/范围、编号/快捷键、默认拒绝、失败重试;仅完整可安全重放的 SDK 建议组提供会话允许;按 YCode session 隔离、非永久设置 | 14 项授权卡 DOM + broker/宿主策略/SDK 接口 mock。**实际 SDK 应用、后续范围匹配、跨回合/重建等真实运行未验收**,不能凭 mock 或按钮成功宣称已修好所有 SDK 语义 |
| 归档/删除确认 | 240 宽任务行右侧 Popconfirm、箭头/焦点/外点吞掉/Escape、锚点消失、重复提交/失败重试;其他 Popover 默认兼容,保留全权限模态 | 26 项 jsdom 行为。原归档文案仅有“系统设置-数据管理”目的地记录,现明确说明 YCode 无此入口且可从已归档查看;全文/边缘避让/像素待验 |
## 证据范围
遵守 AGENTS 的 REA-only 约束;没有绕过 REA 直接读取原版安装包、JS/CSS、调试端口或运行界面。本次只利用计划、项目文档及已恢复到 YCode 的实现。原有证据标注维持:JS `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb` 为 **5.8.2**,CSS `ev_176b4a0369c4836f9498bd4a9c7c9dff10022defcbddaad6dd0080442de78ee9` 为 **5.8.3**。没有新增原版证据 ID,不将前端映射当成后台授权生命周期证据。跨客户端重启的会话授权不承诺持久化。
## 可复现命令
```sh
npm ci --ignore-scripts --legacy-peer-deps --cache /tmp/ycode-npm-cache --registry=https://registry.npmjs.org --no-audit --no-fund
npm run test:alignment
npm run typecheck
npm run build
```
锁文件原有 `electron-vite@5` / `vite@8` peer 冲突,安装使用 legacy-peer-deps;没有改锁文件版本或自动执行全部安装脚本。esbuild 官方平台包可直接使用。Electron 下载脚本审阅后单独运行;未运行发布/升级/旧 WorkBuddy 采集脚本。
可选 DOM 测试(jsdom 验证交互,不验证布局/像素):
```sh
npm install --prefix /tmp/ycode-popconfirm-test --cache /tmp/ycode-popconfirm-test/cache --ignore-scripts --registry=https://registry.npmjs.org jsdom@30.1.3
YCODE_TEST_DOM_MODULE=/tmp/ycode-popconfirm-test/node_modules/jsdom npm run test:alignment
```
## 被阻塞的验证及安全处理
- 安全 Electron 启动失败:无 X server / `$DISPLAY`,未提供 Xvfb。Chromium headless 正常沙箱启动也在 `socket() failed: Operation not permitted` 退出。没有使用 `--no-sandbox`、禁用安全校验或其他绕过。故无本次真实窗口截图,不能交付伪造的像素验收图。
- 实际 SDK 回环测试尝试使用既有构建器及 `timeout 120 node .tmp/claude-kernel-integration.mjs > /tmp/runtime-sdk.log 2>&1`。只观察到 `unrecognized_model` / `claude-mock` / `query_source:sdk` 日志。随后 session 27885 的正常输出轮询被 auto-review 拒绝,理由是 SDK 可能联络 `api.anthropic.com` 并传出项目数据,违反禁止外部模型调用的约束。没有重试或绕过;后续允许的进程检查无 node/claude/timeout 残留。**没有证明实际外部请求/数据传输发生,也没有测试成功证据;实际结果未知。**后续仅运行不启动 CLI/query 的宿主/接口 mock。
- SDK 会话建议支持范围被保守限定:完整组中的每项必须为有明确 ruleContent 的 addRules allow;不按工具名无条件放行、不部分接受混合组、不采用 mode/directory 扩权;重放通过 SDK 支持的接口而非自行字符串匹配。未知/不支持建议仅一次授权并明确解释。
## 明早实际环境验收
1. 在 Windows 安装依赖并启动独立测试配置,勿直接覆盖用户生产数据。
2. 同一视口、DPR、缩放、主题、字体,截图加载/plan/ask/提问中/完成收起展开/授权卡/任务 Popconfirm。
3. 用安全的本地 SDK 测试环境验证:允许一次后再问;会话允许匹配不再问;不匹配/另一会话仍问;正常切换/跨回合/内核重建;应用失败、拒绝、取消、并发、不可覆盖规则与 plan/ask。
4. REA 补取当前版本 ModeChip SVG、模式宿主行为、授权生命周期与未覆盖的运行状态证据;未完成前不能标记完整 1:1。
5. 浏览器大历史实际帧耗时/滚动阻塞、浮层边缘避让及屏幕阅读器/平台焦点实测。
## 最终验证记录(2026-10-20 UTC)
以下 15 条命令退出码均为 0:`test:alignment`(含 58 项 jsdom 交互检查及纯状态/宿主/SDK接口 mock)、`typecheck`、`build`、`test:chat`、`test:conversation`、`test:composer-capabilities`、`test:persistence`、`test:sessions`、`test:assistant-footer`、`test:markdown`、`test:tool-approvals`、`test:references`、`test:recovered`、`test:model-metadata`、`test:font-size`(均使用 `npm run`)。完整命令、耗时、退出码及日志见交付包 `validation-results.json` 与 `logs/`。
`check:tokens` **退出码 1**:另在原始 `771ca54` 只读导出上运行,确认同样 6 个既存问题(recommended-flow、skill-detail-shell、skills-host、capability-picker、composer、prompt-queue);本次新增样式没有新增门禁违规,没有刷新/放宽基线。故不宣称 token 门禁全绿。相关旧测试 fixture 的修正:无模型时代显式提供测试模型;Markdown 引用动作测试提供 sourceId,不放宽生产 guard。
新增授权链路在 IPC 成功前等待 `applyFlagSettings` 的接口确认;失败保留同一待审批交互并显示错误,重试可恢复;取消/切换后不接受滞后结果。会话规则以 session ID + 工作目录隔离,防止相对规则随目录变化扩展。以上仅由宿主/SDK 接口 mock 验证,真正 SDK 匹配与回调内应用行为仍未验收。