Repository navigation
fix(desktop): 修复置顶项目无法拖动排序 - #6249
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
[Medium impact] Adds drag-and-drop test infrastructure for pinned items. 这次改动看起来可以合并,建议补足列表模式的独立回归覆盖。 Findings
Fix with agent prompt### Issue 1
apps/desktop/scripts/fixtures/pinned-native-drag.tsx:68-71
夹具中的 `text` 和 `list` 使用相同宽度、相同的 `renderItem` 和相同的 `SortableList`,两轮检查实际重复同一个页面。生产代码却分别使用 `SessionItem` 和 `SessionCard`,因此列表模式独有的拖拽问题可能仍得到通过结果。建议让夹具按模式渲染对应的行结构。
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
|
反馈已处理已处理:
变更:
验证:
备注:
|
|
@DavidShenXD 👋 这个 PR 已经有 6 天没有 rebase 了。 为了避免合入后出现 CI 未曾验证过的新问题,请在本地 rebase 最新的 |
Signed-off-by: david <david@xd.com>
Signed-off-by: david <david@xd.com>
93d0c06 to
683fe9b
Compare
反馈已处理已处理:
变更:
验证:
备注:
|
MagicLizi
left a comment
There was a problem hiding this comment.
Review #6249 fix(desktop): 修复置顶项目无法拖动排序
审查 head 683fe9b282f735566ee1eda1375f38939427691f,base 6e50085770d4bdf37d517d03cde92845fa6d9412(main),diffHash 58aca5ac…。独立自动审查(heavy 档)。
Findings
无 P0/P1。
Rule coverage
docs/dev-rules/development-workflow.md§3 严重度口径:改动为缺陷修复 + 回归夹具,无红线、崩溃、数据丢失面。docs/design-rules/DESIGN.md§14.1 / §10:不触碰 user-select(侧边栏行仍select-none);新增 CSS 为行为修复、无颜色/视觉 token 变更,Light/Dark 均在真实 Chromium 中验证(见 Verification)。无硬编码颜色、无自造组件。docs/dev-rules/engineering-conventions.mdReview 清单:无生产console.log(仅 dev 脚本输出);无 IPC/main/i18n 改动;新脚本用mkdtempSync独立临时目录且finally清理,不依赖外网(所有请求route.abort,仅放行本地 fixture HTML)、无固定端口;路径/子进程写法跨平台成立(macOS 本地已实测,见下)。docs/dev-rules/electron-security-and-process-boundaries.md§8:仅 renderer 全局样式 + dev 测试脚本,无特权数据、CSP、preload、导航变更。docs/dev-rules/credentials-and-local-storage.md:无凭证、无用户数据落盘,临时文件仅os.tmpdir()一次性夹具产物。
代码事实核对:data-sortable-native-dnd 仅由 forceFallback=false 的容器输出,全仓只有 PinnedSection.tsx 三处使用(TextSortableList / SortableList / CardMasonry),即新增 CSS 的作用域精确等于置顶区;其余 SortableList(TabBar、ProvidersSection 等)默认 forceFallback=true,不受影响。新规则与既有 [data-split-group-drag-source='true'] 的恢复模式完全同构(-webkit-user-drag: element !important 整棵子树),行内按钮/输入框仍由 Sortable 默认 filter(button, input, textarea, select, a, [data-no-drag])与 SessionItem/SessionCard 的 startSessionDrag 交互区守卫拦住,子任务行继续由 data-no-drag 隔离。fallback 列表无 data-sortable-native-dnd,保持原状。
Verification
均在本机(macOS,Google Chrome 作为 Chromium 运行时)完整落盘并记录命令自身退出码:
pnpm --filter desktop exec vitest run …SortableList.test.tsx …DraggableCardColumns.test.ts …DraggableCardColumns.nativeDnd.test.tsx --maxWorkers=2:EXIT=0,3 文件 10 测试通过。pnpm --filter desktop exec vitest run …hooks/__tests__/useSidebarPinnedPersistence.test.tsx --maxWorkers=2:EXIT=0,17 测试通过(合计 27,与 PR 声明一致)。pnpm --filter desktop run --if-present typecheck:EXIT=0。pnpm exec prettier --check(两个新文件):EXIT=0;git diff --check:EXIT=0。node apps/desktop/scripts/check-pinned-native-drag.mjs "<Google Chrome>":EXIT=0,Light/Dark × 文字/列表/卡片 1/2/3 列共 10 个配置全部 PASS(行结构、项目与任务起拖、控件、子任务边界、Esc、区域外落点)。此结果补上了 PR 中「macOS 未验证」的缺口(同一 Chromium 内核行为验证,仍非 Electron.app 实机)。- 反证:同一脚本
--stylesheet-ref=6e50085770d4bdf37d517d03cde92845fa6d9412(修复前 CSS):EXIT=1,首个项目排序场景page.waitForFunction超时(顺序从未提交),确认夹具能捕获原缺陷。 security-scan.mjs --base 6e500857…:verificationLine= 依赖漏洞扫描:本 PR 未新增依赖,无需扫描;静态扫描(semgrep,仅新增):0 条。注意:semgreperrors非空(BaselineHandler 初始化异常),即部分基线比对未完整跑成,不把该部分当作「已证明没问题」;结合阶段一安全门 0 hard/0 soft 命中与逐行人工复核(脚本与夹具均不进生产包、无网络/凭证/用户数据流向),不构成阻断。- 未执行:Electron.app macOS 实机拖拽(本环境无图形实机操作条件),PR 作者已在 Windows Electron 41.10.3 实测并经用户验收。
Intent alignment
- 描述来源:PR body(2026-10-16 读取)+ 关联 issue #6227(置顶对话无法手动拖动排序)、修复方向 #5712。
- 初始实现:
d57350f89b65ba8bcaea8f4ae7af08f0be78ddf6(修复 CSS 8 行 + 初版回归脚本/夹具,父提交2082425d…);第二提交683fe9b2仅改测试脚本与夹具(区分文字/列表/卡片行结构),系对已 Resolve 的 greptile P2 的响应。rebase 到最新 main 未改补丁内容(git range-diff 由作者核验,两提交文件内容与本次 diff 一致)。 - 最终行为:原目标(置顶区可手动拖拽排序)→ 最终为置顶区原生排序行恢复起拖能力,项目可从标题/图标起拖并与置顶任务排序;Codex 复核 completed、无 findings。
- 结论:一致。第二提交只增强回归夹具的判别力,未扩范围、未加依赖、未改生产行为。已 Resolve 的 bot 意见落实在
683fe9b2。如实保留的边界(PR 已自述):issue 报告的是置顶「对话」,本次稳定复现的是置顶「项目」,普通置顶任务在基线中本就可排序,不能断言覆盖原报告全部触发条件——该修复在 CSS 层对置顶区所有原生排序行生效,属服务原目标的收敛修复,不判偏离。
Overall
pass —— 没有 P0/P1。附注(非阻断):① UI 实机证据(截图/录屏)未上传 PR(GitHub API 不支持图片附件),仅本地 acceptance.html 描述,建议作者补充;② 机器人静默期按 20 分钟上限超时放行,copilot-pull-request-reviewer 与 chatgpt-codex-connector 未对当前 head 表态,其意见可能在合并后到达。
这次改了什么
摘要
置顶项目标题和图标无法起拖:全局
-webkit-user-drag: none阻止 Chromium 原生拖拽,即使 SortableJS 已把外层标记为可拖动。本次为原生排序容器中被激活的行及其子树恢复原生拖拽,增加真实 Chromium 回归脚本。生产改动仅 8 行 CSS。变更类型
fix缺陷修复feat新功能refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
UI 变化
docs/design-rules/DESIGN.md§14.1(侧边栏作为控件保持不可选中文字)、§10(Light / Dark 双模式);在这两种主题下分别验证拖拽、取消与响应式列数切换。%TEMP%/cindy-6227-mH1WJS/acceptance.html,用户已验收通过。截图按design-governance.md§6 不进入 Git 历史;GitHub API / CLI 不支持 PR 图片附件上传,截图尚未上传到 PR。怎么验证的
自动验证
手工验证
通过 CDP 发送真实鼠标与键盘输入,在
--region=global --isolated=issue6227-merry --passive的真实 Electron 中操作;未通过内部业务 API 或数据库注入测试数据。DESKTOP_DEV_VERDICT=ready,顺序和显示设置仍保留。未执行的验证
风险
风险分类
影响与回滚
data-sortable-native-dnd=true容器中被 SortableJS 设为draggable=true的直接子行及其子树;Windows 已验收,macOS 待实机复核。提交前检查
git commit -s)