fix: close alignment review races and preserve local conversation state

This commit is contained in:
Codex committed 2026-10-21 04:55:11 +09:00
1 parent c7231be2c5
commit 37ddb2ce24
14 files changed
+203 -45

No files matched your search

@@ -2,7 +2,7 @@
基线:`771ca540f71b387d11865bc5c07f7d4f4d8b6ecf`。工作分支:`workbuddy/alignment-2026-10-21`。
本次为十项方案的本地代码实现及可执行回归,**不是 WorkBuddy 当前版本完整 1:1 / Windows / 像素验收**。未推送、发布、安装覆盖用户应用,也未使用 Codex 云任务或 CLI。
本次为十项方案的本地代码实现及可执行回归,**不是 WorkBuddy 当前版本完整 1:1 / Windows / 像素验收**。未发布、安装覆盖用户应用,也未使用 Codex 云任务或 CLI。推送仅尝试用户指定 Gitea 的独立审核分支;实际结果以交付回执为准,不修改 master。
## 十项交付矩阵
@@ -14,10 +14,10 @@
| 模式输入栏 | plan/ask Chip、清除回 craft、插槽顺序、权限禁用且关闭浮层;plan 有效显示默认权限,保留原偏好,ask 禁改 | 状态/SSR 回归。Chip SVG 为本地几何,不谎称原版 SVG 已恢复;同版本原版图标、字体和宿主差异待 REA |
| 局部过程分组 | 至少两项连续过程各自成组,后续正文/终态触发局部折叠;尾段独立;保留特殊节点 | 同轨迹、多组、正文锚点及展开顺序回归 |
| 底部运行状态 | 共享 progress 事件、真实准备/思考/工具/等待问答/等待授权/收尾;恢复快照、序号及终态清理;reasoning-only、tips 延迟/轮换/独立悬停与焦点暂停/关闭 | 纯事件与 DOM 行为测试;无云启动/网络恢复/credit 数据源,未伪造这些分支或静默超时;原版文案优先级全状态仍待 REA |
| 提问与已答记录 | 分页、键盘/焦点、补充、多选、跳过、重复提交、失败重试、IME、旧计时器隔离;工具关联投影去重;缺失位置的历史明确标识 | 18 项 jsdom 行为及投影/SSR;真实浏览器布局/焦点待验 |
| 提问与已答记录 | 分页、键盘/焦点、补充、多选、跳过、重复提交、失败重试、IME、旧计时器隔离;工具关联投影去重;缺失位置的历史明确标识 | 24 项 jsdom 行为与历史投影及投影/SSR;真实浏览器布局/焦点待验 |
| 完成折叠 | 默认完成/取消耗时块;外层/局部/工具/思考独立状态;展开原始记录顺序;真实终态时间,不冒用创建时间 | 完成展开/局部切换、消息 footer 回归;历史无终态时间则不伪造 |
| 工具授权及会话允许 | 输入区宽卡、真实工具/命令/目标/原因/范围、编号/快捷键、默认拒绝、失败重试;仅完整可安全重放的 SDK 建议组提供会话允许;按 YCode session 隔离、非永久设置 | 14 项授权卡 DOM + broker/宿主策略/SDK 接口 mock。**实际 SDK 应用、后续范围匹配、跨回合/重建等真实运行未验收**,不能凭 mock 或按钮成功宣称已修好所有 SDK 语义 |
| 归档/删除确认 | 240 宽任务行右侧 Popconfirm、箭头/焦点/外点吞掉/Escape、锚点消失、重复提交/失败重试;其他 Popover 默认兼容,保留全权限模态 | 26 项 jsdom 行为。原归档文案仅有“系统设置-数据管理”目的地记录,现明确说明 YCode 无此入口且可从已归档查看;全文/边缘避让/像素待验 |
| 归档/删除确认 | 240 宽任务行右侧 Popconfirm、箭头/焦点/外点吞掉/Escape、锚点消失、重复提交/失败重试;其他 Popover 默认兼容,保留全权限模态 | 28 项 jsdom 行为。原归档文案仅有“系统设置-数据管理”目的地记录,现明确说明 YCode 无此入口且可从已归档查看;全文/边缘避让/像素待验 |
## 证据范围
@@ -55,10 +55,25 @@ YCODE_TEST_DOM_MODULE=/tmp/ycode-popconfirm-test/node_modules/jsdom npm run test
4. REA 补取当前版本 ModeChip SVG、模式宿主行为、授权生命周期与未覆盖的运行状态证据;未完成前不能标记完整 1:1。
5. 浏览器大历史实际帧耗时/滚动阻塞、浮层边缘避让及屏幕阅读器/平台焦点实测。
## 最终验证记录(2026-10-20 UTC)
## 首轮验证记录(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。