Skip to content

fix(mobile): 延长项目拖动的长按激活时间 - #7087

Merged
MagicLizi merged 1 commit into
mainfrom
dash/mobile-project-drag-delay
Oct 25, 2026
Merged

MagicLizi merged 1 commit into
mainfrom
dash/mobile-project-drag-delay

Conversation

@dashhuang

Copy link
Copy Markdown
Member

这次改了什么

摘要

手机版项目列表在滚动时容易误触项目拖动。将项目标题的拖动长按激活时间从 380ms 延长到 600ms,为滚动留出更多时间;iOS、Android 共用此设置。

变更类型

  • fix 缺陷修复

范围

  • 关联 Issue / 需求:用户反馈滚动项目列表时容易误触拖动,希望稍微延长长按时间。
  • 本 PR 包含:项目标题拖动的长按激活时间调整。
  • 明确不包含:其他长按入口、拖动排序算法、滚动阈值及原生配置的修改。
  • 用户可见变化:按住项目标题约 0.6 秒后才激活拖动。
  • 是否存在 breaking change:无。

UI 变化

仅调整手势时间,布局、颜色和文案均不变。未附截图:静态截图无法展示长按时间差;未录制真机操作。

  • 引用的设计规范:docs/design-rules/DESIGN.md §14 交互约定;沿用现有手势和反馈,仅提高拖动激活的长按门槛以减少滚动误触。

怎么验证的

自动验证

pnpm --filter mobile typecheck
结果:通过。

pnpm --filter mobile exec vitest run src/__tests__/homeProjectOrder.test.ts src/__tests__/homeAutomationWindow.test.tsx src/__tests__/swipeableProjectHeader.test.tsx
结果:3 个文件、26 项测试通过,耗时 1.26 秒。

git diff --check
结果:通过。

本次为单个时间参数调整,复用现有排序、拖动回调及项目侧滑测试,未新增测试。

手工验证

已自审完整 diff,确认仅项目拖动的长按激活时间变化。

未执行的验证

未运行 iOS / Android 真机或模拟器手势验收,未做 Light / Dark 实机目检;本轮仅完成代码与自动检查,实际手感仍待设备验证。分支 dash/mobile-project-drag-delay,worktree cindy-src-mobile-project-drag-delay;未启动 Metro,无运行中 bundle 或 __DEV__ build label 证据。未运行整仓测试,此单参数改动按仓库要求完成相关定向测试与 Mobile 类型检查。

风险

风险分类

  • 其他:有意拖动时需多等待 220ms,实际手感未经设备验证。

影响与回滚

  • 影响范围:iOS / Android 首页项目列表拖动;不涉及原生层或 runtime fingerprint 输入。
  • 回滚 / 降级方式:将激活时间恢复为 380ms,或回滚本提交。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO)
  • UI 改动已在「UI 变化」注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件
  • 已核对受影响的文档,无需修订既有结论
  • 已确认测试结果或说明未执行原因

Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@dashhuang
dashhuang requested a review from a team as a code owner October 25, 2026 01:58
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-25T02:01:08.630132Z 4105eae PR opened
🔒 Security Review ✅ Completed 2026-10-25T02:02:49.192696Z 4105eae PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] 本次修改符合预期,未发现阻碍合并的问题。

Summary

将移动端项目标题拖动的长按激活时间从 380ms 延长至 600ms,以减少滚动时误触拖动。

  • Project title dragging waits longer to start.

Reviews (1) · Last reviewed commit: "fix(mobile): 延长项目拖动的长按激活时间" · Reviewed by Greptile

@MagicLizi MagicLizi added status:ci-failed CI 失败(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) and removed status:ci-failed CI 失败(review-pr 自动维护,仅展示) labels Oct 25, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

PR #7087 独立代码审查报告(auto · standard 档)

  • PR: fix(mobile): 延长项目拖动的长按激活时间 #7087
  • 标题: fix(mobile): 延长项目拖动的长按激活时间
  • head: 4105eaeebafcd52dd919d9cd3164b788c831c309(单 commit)
  • base: 08d178868cdf2803e7618f18d8f882265492d065(main)
  • diffHash: 8fdbc255caa59e67cc7db4d100ee8c0e408c0c97cca1b8b5189838c643fd114c

Findings

无 P0/P1。

(P2 级观察,按口径不报告、不阻断:activateAfterLongPress 的 600ms 与 TaskTags.tsx 另一处
拖动手势的 380ms 现在取值不同,且数值仍是组件内字面量。PR 已明确把「其他长按入口」排除在
范围外,属可选的一致性整理,不影响本次结论。)

Rule coverage — 读取的规则文件及逐项结论

  • AGENTS.md / docs/dev-rules/development-workflow.md(PR 模板事实源、P0/P1/P2 口径):
    单一目的(一个手势激活时长参数);Description 三大段齐备且与 diff 一致;提交前验证
    (typecheck + 定向测试)如实填写并经复跑核实;DCO 单 commit 签名与 author/committer 一致。
    按 P0/P1/P2 口径无可报告项。
  • .github/PULL_REQUEST_TEMPLATE.md:Title 格式 fix(mobile): … 合规;「范围」「UI 变化」
    「风险」「影响与回滚」均按模板填写;UI 变化注明了引用的规范章节(DESIGN.md §14)。
    格式门 formatPass=true,无格式问题。
  • docs/dev-rules/mobile-development.md(apps/mobile 命中):改动仅 HomeSurface.tsx 内的
    JS 手势参数,不触碰 app.json / app.config.js / eas.json / apps/mobile/package.json /
    plugins/ / modules/ / fingerprint.config.cjs 等任何指纹输入,不触发冷更,无需冷更
    确认门。「分层验证」要求的 typecheck + 相关定向测试已运行并通过;真机手势验收未执行,
    PR 在「未执行的验证」如实写明(不伪造)。
  • docs/dev-rules/remote-and-mobile-adaptation.md:不涉及 workdir/agent 进程/会话数据、
    无新增或修改 IPC/推送事件、不触及 device-link 恢复路径;改动本身就是手机版既有手势的
    时长调参,无三形态适配缺口(该长按手势仅存在于触屏端),「PR 门禁」三选一不构成本 PR 的
    阻塞项。Review 清单 1/2/4/5 均不命中。
  • docs/design-rules/DESIGN.md(UI 命中,含 §14 交互约定):§14 未登记长按激活时长的固定
    档位;§14.4 的 motion token 管的是转场/动画时长与曲线,activateAfterLongPress 是手势
    激活延迟、非动画时长,不落在 token 档位约束内。无新增动画、无硬编码颜色、无自造组件、
    无布局/文案变化,不触碰 §7 红线与 §5 圆角/目标尺寸规则。DESIGN.md 无违反。
  • docs/dev-rules/engineering-conventions.md:不涉及日志、IPC 错误处理、跨平台 main 行为与
    i18n 文案落地;无新增测试(单参数调校,现有 homeProjectOrder / homeAutomationWindow /
    swipeableProjectHeader 测试覆盖拖动装配与排序逻辑),不构成缺必要测试的 P1。
  • 安全与隐私门:security.scanned=true、hardHits=[]、softHits=[],无凭证/隐私命中;
    本档(standard)不需 heavy 的 security-scan 专项。改动不放宽任何权限边界、不引入依赖、
    不让数据流向新位置。
  • 固定问题逐项:单一目的且 Description 与 diff/测试/风险一致;无共享符号/协议/配置/
    持久化读方需要追踪(唯一改动是组件内手势参数,其消费方即本组件的手势注册);权限/
    凭证/远程边界不涉及;无危险写法;测试证据见 Verification;不涉及 Core 归属;UI 证据缺失
    仅非阻断提醒(静态截图无法呈现时长差异,PR 已说明);无冷更;无 P0/P1。

Verification — 实际运行的命令、结果、未执行项及原因

在审查 worktree(PR head 4105eae)实际执行:

git diff --check                       → 通过(无空白错误)
pnpm install                           → 成功(worktree 无共享 node_modules,按环境文档安装)
pnpm --filter mobile typecheck         → 通过(tsc --noEmit 退出码 0)
pnpm --filter mobile exec vitest run src/__tests__/homeProjectOrder.test.ts \
  src/__tests__/homeAutomationWindow.test.tsx src/__tests__/swipeableProjectHeader.test.tsx
                                       → 3 个文件、26 项测试全部通过(1.21s),与 PR 声称一致
git log --format 核验 4105eaee         → Signed-off-by 与 author/committer 一致(DCO)

未执行:iOS/Android 真机手势手感验收、Light/Dark 实机目检、整仓 pnpm test:unit。
原因:真机/目检需设备与 Metro 环境,PR 已在「未执行的验证」如实声明;本改动为单个手势
参数,定向测试 + typecheck 已覆盖其影响面,完整门禁由 CI(client-ci 已绿)承担。

Intent alignment — PR 原目标、初始 SHA、最终行为、变化依据与偏离/存疑提醒

  • 描述来源:PR 当前 body(2026-10-25 读取),「范围」明确:解决用户反馈的滚动项目列表时
    误触拖动
    ,把项目标题拖动的长按激活时间 380ms → 600ms;明确不包含其他长按入口、拖动
    排序算法、滚动阈值及原生配置。关联需求为用户反馈,无独立 issue。
  • 初始实现:本 PR 仅一个 commit 4105eaeebafcd52dd919d9cd3164b788c831c309(base
    08d178868cdf2803e7618f18d8f882265492d065),已实际读取该 revision 代码:
    apps/mobile/src/session/HomeSurface.tsx 中 ProjectRow 的 Gesture.Pan().activateAfterLongPress(380)。
    初始实现即待合并 head,无中间修复轮次(Codex code/security review 均 has_any_findings=false,
    Greptile 5/5 无问题,无 review thread、无讨论 issue)。
  • 现在要合什么:同一行改为 activateAfterLongPress(600),其余手势配置
    (activeOffsetY([-8, 8])、failOffsetX([-12, 12]))与拖动回调链完全不变。
原目标/初始行为 最终行为与影响 代码/提交证据 变化依据或待确认问题
滚动时误触项目拖动;按住 380ms 即激活拖动 按住 600ms 才激活拖动,为滚动留出时间;仅影响首页项目列表拖动手感 4105eaee apps/mobile/src/session/HomeSurface.tsx:3972 用户反馈(PR「范围」记载);同一 commit 内完成,无行为反转
  • 结论:一致,无偏离。核心目标(延长拖动激活门槛以减少滚动误触)在最终 diff 中完整
    落实,无删除/削弱/无关扩范围;多轮 bot 审查无发现、无修复引入的方向变化。唯一行为
    变化即原目标本身(激活时长 +220ms),PR 已把「有意拖动需多等待 220ms、手感未上机验证」
    如实列为风险并给出回滚方式。

Overall

pass —— 没有 P0/P1。原意一致性复核完成且一致;建议合并(维护者 zqchris 已对当前 head
给出独立 Approve 并放行产品确认门,CI 全绿,0 未解决 thread)。

@MagicLizi
MagicLizi merged commit c01d749 into main Oct 25, 2026
35 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants