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

11 KiB
Raw Blame History

对话与输入统一对齐:实现与验收

基线:771ca540f71b387d11865bc5c07f7d4f4d8b6ecf。工作分支:workbuddy/alignment-2026-10-21。

本次为十项方案的本地代码实现及可执行回归,不是 WorkBuddy 当前版本完整 1:1 / Windows / 像素验收。未发布、安装覆盖用户应用,也未使用 Codex 云任务或 CLI。推送仅尝试用户指定 Gitea 的独立审核分支;实际结果以交付回执为准,不修改 master。

十项交付矩阵

范围 已实现 已验证与保留边界
会话加载 新任务与已有空会话分离;无缓存两组骨架、标题占位、淡出;缓存优先;失败重试;重复选择不刷新;发送 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、旧计时器隔离;工具关联投影去重;缺失位置的历史明确标识 24 项 jsdom 行为与历史投影及投影/SSR;真实浏览器布局/焦点待验
完成折叠 默认完成/取消耗时块;外层/局部/工具/思考独立状态;展开原始记录顺序;真实终态时间,不冒用创建时间 完成展开/局部切换、消息 footer 回归;历史无终态时间则不伪造
工具授权及会话允许 输入区宽卡、真实工具/命令/目标/原因/范围、编号/快捷键、默认拒绝、失败重试;仅完整可安全重放的 SDK 建议组提供会话允许;按 YCode session 隔离、非永久设置 14 项授权卡 DOM + broker/宿主策略/SDK 接口 mock。实际 SDK 应用、后续范围匹配、跨回合/重建等真实运行未验收,不能凭 mock 或按钮成功宣称已修好所有 SDK 语义
归档/删除确认 240 宽任务行右侧 Popconfirm、箭头/焦点/外点吞掉/Escape、锚点消失、重复提交/失败重试;其他 Popover 默认兼容,保留全权限模态 28 项 jsdom 行为。原归档文案仅有“系统设置-数据管理”目的地记录,现明确说明 YCode 无此入口且可从已归档查看;全文/边缘避让/像素待验

证据范围

遵守 AGENTS 的 REA-only 约束;没有绕过 REA 直接读取原版安装包、JS/CSS、调试端口或运行界面。本次只利用计划、项目文档及已恢复到 YCode 的实现。原有证据标注维持:JS ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb 为 5.8.2,CSS ev_176b4a0369c4836f9498bd4a9c7c9dff10022defcbddaad6dd0080442de78ee9 为 5.8.3。没有新增原版证据 ID,不将前端映射当成后台授权生命周期证据。跨客户端重启的会话授权不承诺持久化。

可复现命令

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 验证交互,不验证布局/像素):

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 匹配与回调内应用行为仍未验收。

独立复审与增量修复(2026-10-20 UTC)

在 c7231be 上另做状态/首发、运行时/授权、UI/集成三条审查,修复六处实际缺陷,而非只重复旧测试:

  1. 待保存模型被默认值覆盖:旧/失效模型会话选择新模型后立即发送,先前发送路径会排队写回默认模型。现先等待该会话设置收敛再解析回退,修复仍绑定原会话;新增缺失/已删除模型 × 直接发送/队列及等待中切换会话四组回归。
  2. 提问跳页竞态:单选后的 120ms 自动翻页可能在手动“下一页/跳过”后再次翻页。显式导航取消计时器,回调绑定请求代次与原页;新增两组 DOM 回归。
  3. 历史问答伪造顺序/重复:没有记录 parts 的旧工具回退序列不再当成真实提问位置。交互或 metadata-only 答案走明确的未知位置兼容区,抑制重复工具条目;四项投影/SSR 回归。
  4. 完成展开丢失局部分组:展开外层完成块仍保留局部摘要控件与分类上下文,而不是扁平化所有过程;继续按记录顺序展示,新增分组与顺序断言。
  5. 外部点击误选任务:指针按下在任务标题子节点、抬起在任务行时 click 可能重新定向到祖先。确认浮层现在同样吞掉这次关闭点击,但后续普通点击不受影响;新增两项 DOM 断言。
  6. 拒绝/跳过后仍显示等待:审批拒绝、问题跳过和正常回答在有效回合内回到真实思考阶段;取消后的滞后回调不发新阶段;宿主 mock 回归覆盖这些路径。

同时校正 README 中过期 OMP 启动说明和不存在的脚本入口。Windows 重编译使用 Node.js 24.x、npm ci --legacy-peer-deps、npm run build;启动前设置独立 YCODE_USER_DATA_DIR,勿用生产数据目录试验。npm run dist:installer 需在 Windows x64 环境及对应 optional SDK 依赖下另行验收,本次不以 Linux build 成功代替 Windows 安装包验证。

复审最终 15 条测试/typecheck/build 命令均退出 0;命令、退出码与日志由源码包中的 review-validation/validation-results.json 和 review-validation/logs/ 提供。test:alignment 使用独立 jsdom 安装,包含 66 项 DOM/投影检查(28 任务确认、24 问答、14 授权),另含状态、分组及宿主/SDK接口 mock;它不是实际 SDK/窗口/像素验收。check:tokens 在重新导出的原始 771ca54 与复审代码上各运行一次,均为相同六个既存失败,未修改 token baseline。