Skip to content

fix(mobile): 在 iPad 和 iPhone Duo 双栏任务列表顶部显示伙伴 - #7079

Merged
MagicLizi merged 4 commits into
mainfrom
dash/mobile-split-companions
Oct 24, 2026
Merged

MagicLizi merged 4 commits into
mainfrom
dash/mobile-split-companions

Conversation

@dashhuang

@dashhuang dashhuang commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

这次改了什么

摘要

iPad 和 iPhone Duo 在任务页使用双栏布局时,左侧任务列表没有显示首页顶部的伙伴区。现在内嵌列表同样显示伙伴,并复用首页的展开列表、折叠头像条、搜索与下拉刷新。

伙伴名册的 Provider 从首页路由移到共用的 MobileHome 内,按账号代次重建,确保首页和任务侧栏都有名册且继续遵循页面焦点订阅。

伙伴、云端伙伴、群聊和创建后的前进跳转统一使用列表传入的 guardedPush。模态抽屉先关闭并卸载,再执行最终路由;伙伴选择、账号校验和预览准备仍在卸载前完成,避免返回时多关闭一次遗留抽屉。

关闭开始后,抽屉内容统一停止接收触摸与无障碍操作;退场仍保留原有遮罩,重新打开恢复操作,避免退场中的第二次选择覆盖已排队伙伴的偏好。

变更类型

  • fix 缺陷修复

范围

  • 关联 Issue / 需求:用户反馈 iPad / iPhone Duo 双栏任务列表缺少伙伴。
  • 本 PR 包含:共用列表挂载伙伴名册、显示伙伴区、内嵌列表刷新伙伴。
  • 明确不包含:伙伴协议、身份、数据存储与原生配置变更。
  • 用户可见变化:伙伴显示在置顶、项目和任务之前;共用此列表的抽屉也保持一致。
  • 是否存在 breaking change:无。

UI 变化

iPhone Duo 展开横屏与 iPad 横屏模拟器已确认左侧伙伴区和右侧聊天同时显示;Duo 同时检查了展开和折叠。使用 --mock 模拟数据,截图已在原任务供用户确认,未上传公开附件。模拟群服务的读取提示属于该预览环境,不能作为真实账号群聊链路已验证的证据。

  • 引用的设计规范:docs/design-rules/DESIGN.md §5 Mobile task home teammate section:直接复用 HomeTeammatesSection 的三行预览、显示全部、折叠头像条及语义主题样式;§10:保留既有 Light / Dark 样式,不引入颜色常量。

怎么验证的

自动验证

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

pnpm --filter mobile exec vitest run src/__tests__/HomeTeammatesSection.test.tsx src/__tests__/TeammateList.test.tsx src/__tests__/sessionListDrawerUpdates.test.tsx src/__tests__/sessionListDrawer.test.ts src/__tests__/homeDesktopFirst.test.ts
结果:5 个文件、88 项通过,2.13 秒。

pnpm --filter mobile exec vitest run src/__tests__/HomeTeammatesSection.test.tsx src/__tests__/useTeammateNavigation.test.tsx src/__tests__/sessionListDrawerUpdates.test.tsx src/__tests__/sessionListDrawer.test.ts src/__tests__/homeDesktopFirst.test.ts
结果:5 个文件、100 项通过,1.59 秒(同步主干后);Mobile 类型检查也重新通过。

pnpm --filter mobile test:smoke
结果:2 项通过。

pnpm --filter mobile test:scope
结果:通过。

git diff --check
结果:通过。

测试价值(unit,PR #7079 抽屉导航反馈):

  • HomeTeammatesSection.test.tsx:真实组件触发云伙伴、群聊及建群回执;验证宿主延迟路由在关闭前不执行。原有测试仅覆盖名册刷新,未覆盖导航。最小输入为一个伙伴或群条目及延迟 push;新增 3 个用例修复前失败。单独运行 2.07 秒。
  • useTeammateNavigation.test.tsx:真实 hook 的已有伙伴和新建回执均先完成选择,再等待宿主关闭抽屉;卸载后仍能执行已排好的路由。原有用例仅覆盖立即跳转;新增 2 个用例修复前失败。单独运行 1.93 秒。
  • sessionListDrawerUpdates.test.tsx:实际挂载 SessionListDrawer,沿用退场/重开用例检查 RN 原生触摸及无障碍接口;旧覆盖只检查最终卸载,遗漏退场期间第二次伙伴选择。最小输入为 open 从 true 变 false、退出动画尚未完成;两项扩展断言修复前失败,修复后通过。unit、假时钟,单独运行 0.59 秒;最终 100 项定向测试与类型检查均通过。

手工验证

  • iPhone Duo 内屏横屏:进入任务,伙伴区在左侧顶部;展开和折叠均可见。
  • iPad Pro 13 横屏:进入同一模拟任务,伙伴区在左侧顶部。
  • Global 开发包,原生指纹匹配;Metro 8081 属于本 worktree,并记录新 iOS Bundled。
  • 分支 dash/mobile-split-companions;worktree /Users/dash/Code/Cindy/projects/cindy-src-mobile-split-companions。
  • 截图时源码身份为 dash/mobile-split-companions@c335ab98f+9a132eed95,whoami 核对与 Metro 注入一致;未单独展开 DEV build label 截图。

未执行的验证

未做真实账号端到端、Android 实机和深色模式目检;本次只调整共用组件挂载,未修改主题样式、远程协议或原生依赖。按风险完成定向验证,未重跑整仓单测。

风险

风险分类

  • 无已知风险

影响与回滚

  • 影响范围:MobileHome 的首页和内嵌任务列表。
  • 回滚 / 降级方式:回退本提交即可;无数据迁移、协议变化或 runtime fingerprint 变更。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名
  • UI 改动已注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件
  • 已核对受影响的文档,本次补齐已有首页行为,无冲突旧结论
  • 已确认测试结果并说明未执行原因

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

chatgpt-codex-connector Bot commented Oct 24, 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-24T21:38:36.010248Z 2ae9c7c New commits
🔒 Security Review ✅ Completed 2026-10-24T21:39:39.978751Z 2ae9c7c New commits
ℹ️ 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 24, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] The change reaches the mobile home list and its embedded task-list view.

整体可以合并,但建议补上伙伴入口的抽屉关闭流程,避免 Android 用户返回时多按一次。

Findings

  1. P2 伙伴对话返回多按一次 ▶
Fix with agent prompt
### Issue 1
apps/mobile/src/session/HomeSurface.tsx:2979-2985
新增的抽屉伙伴入口绕过了 `runNavigation`。`HomeTeammatesSection` 直接跳转,没有通过 `queueDrawerNavigation` 先关闭并卸载模态抽屉。从 Android 抽屉打开云端伙伴后,原抽屉仍保持打开,其 `BackHandler` 会吞掉第一次系统返回,只关闭背后的抽屉。

建议把伙伴、群聊和创建后的跳转接入抽屉现有的导航回调,避免用户还要再按一次才能离开对话。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

将 HomeRosterProvider 移入共用的 MobileHome,让双栏任务列表和抽屉也能显示伙伴。

  • Embedded task lists now show the teammate section at the top.

Reviews (1) · Last reviewed commit: "fix(mobile): 在双栏任务列表顶部显示伙伴" · Reviewed by Greptile

Comment thread apps/mobile/src/session/HomeSurface.tsx

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c53c65d56c

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/mobile/src/session/HomeSurface.tsx
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b1794a2a08

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/mobile/src/session/useTeammateNavigation.ts
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@MagicLizi MagicLizi added the touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) label Oct 24, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

PR #7079 独立代码审查报告(standard 档)

  • PR:fix(mobile): 在 iPad 和 iPhone Duo 双栏任务列表顶部显示伙伴 #7079
  • head:2ae9c7c552c280bc56dc9d6814bca5dd376b2573,base:325a1a8520eab7157b67441c6a4725e2f54960f5(main)
  • 变更:iPad / iPhone Duo 双栏任务列表顶部显示伙伴区;伙伴名册 Provider 下沉到共用 MobileHome;伙伴/群聊/建群回执跳转统一经列表宿主的 guardedPush(先关抽屉再派发路由);抽屉退场期间停用列表触摸与无障碍操作。

Findings

  • 没有 P0/P1。
  • P2 不报告、不阻断(已核:bot 提出的 2 条意见均已修复并 Resolve)。

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

  • AGENTS.md、docs/dev-rules/development-workflow.md、.github/PULL_REQUEST_TEMPLATE.md:
    • 单一目的、描述与 diff 一致:摘要/范围/风险三段与 4 个 commit 及最终 diff 对得上,无夹带。
    • DCO:4 个 commit(含 merge commit)均带 Signed-off-by 且与 author 一致(git log %(trailers) 逐个核对)。
    • 未提交凭证/令牌:security 门 scanned=true、hardHits=0、softHits=0,diff 内无凭证类内容。
    • 风险分类、回滚方式在描述中写明(回退提交即可,无数据迁移/协议变化)。
  • docs/dev-rules/mobile-development.md(冷更边界):改动仅限 apps/mobile/src/**、apps/mobile/app/** 的 TS/TSX,未触及 app.json / app.config.js / eas.json / apps/mobile/package.json / plugins/ / modules/ / fingerprint.config.cjs,不改变 runtime fingerprint、不触发冷更;描述中亦写明无 fingerprint 变更。结论:不触发冷更确认门。
  • docs/dev-rules/remote-and-mobile-adaptation.md(Review 清单):
    1. 不涉及 workdir/agent/会话数据落盘与 SSH 远程通道——只改 UI 组件装配与导航派发;
    2. 无新增 IPC/push/allowlist 条目;
    3. 手机版 UI 改动已给出定向测试与模拟器手工验证记录;
    4. 描述给出明确范围结论(含关联需求、明确不包含项);
    5. 不涉及重试/超时/断链恢复路径。
  • DESIGN.md(§5 Mobile task home teammate section、§10 双模式)与 docs/design-rules/cindy-design-system.md:
    • 伙伴区直接复用既有 HomeTeammatesSection(三行预览 / 显示全部 / 折叠头像条),未自造组件顶替设计系统组件;
    • 未新增任何颜色常量或硬编码颜色,样式全部走既有语义 token / themed styles;抽屉改动只加 pointerEvents / accessibilityElementsHidden / importantForAccessibility 三个行为属性,无视觉样式新增;
    • 双模式:无新增样式,Light/Dark 行为随既有主题,不存在单模式硬编码补丁。
  • docs/dev-rules/engineering-conventions.md:无 main 进程逻辑、无日志改动、无新增 UI 文案(全部复用既有 i18n 键),跨平台(iOS/Android)行为以 RN 标准属性实现并在测试中以原生接口契约断言覆盖。
  • 共享符号/调用方追踪(按 rule-map 固定问题 2/5):
    • MobileHome 新增 HomeRosterProvider 包裹后,全仓仅两处渲染 MobileHome(app/devices/index.tsx 首页、SessionListDrawer 内嵌列表),已核不存在双层 Provider 嵌套或丢失 Provider 的调用方;useHomeRoster 唯一消费方 useHomeTeammatesSectionContext 在 Provider 之内。
    • HomeTeammatesSection 新增可选 push prop 向后兼容(hostPush ?? guardedPush),所有伙伴/云端伙伴/群聊/建群回执入口(openTeammate、openGroup、onCreated→openCreatedTeammate、onGroupCreated)均已统一走该 push,无遗漏的裸 router.push。
    • useTeammateNavigation(hostPush?) 只延后最终派发;lastTeammate 偏好写入、账号代次与挂载守卫仍在抽屉存续期完成,与返回栈语义一致(不会出现「打开 A 却记住 B」——退场期二次选择被 pointerEvents="none" 挡住)。
    • SessionListDrawer 的 open 判据与两种宿主一致:模态抽屉(sessionListDrawerOpen)与 Duo 常驻列(open={paneLayout.persistent})在存续期均为 open=true,不会误停用常驻列的输入。
    • refreshHome 去掉 embedded || 后,内嵌列表下拉刷新会同步刷新名册/群聊——与描述一致,属预期行为扩展(同一入口补齐),无破坏性。
    • 错误/回滚路径:名册/群聊读取失败沿用既有 useDelayedConnectionNotice 重试行,不改错误面;回滚为整体回退提交。

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

均在 PR head 检出的审查 worktree 中运行,保留命令自身退出码:

命令 退出码 结果
pnpm install --frozen-lockfile 0 依赖就绪(worktree 初始无 node_modules)
pnpm --filter mobile typecheck 0 通过(首轮因 workspace 依赖未装全报 @cindy/* 找不到模块,补全安装后通过,与 PR 无关)
pnpm --filter mobile exec vitest run src/__tests__/HomeTeammatesSection.test.tsx src/__tests__/useTeammateNavigation.test.tsx src/__tests__/sessionListDrawerUpdates.test.tsx src/__tests__/sessionListDrawer.test.ts src/__tests__/homeDesktopFirst.test.ts 0 5 文件、100 项通过(与描述一致)
pnpm --filter mobile test:smoke 0 2 项通过
pnpm --filter mobile test:scope 0 mobile-scope-guard passed
pnpm --filter mobile test(超出描述的追加回归) 0 769 文件、10790 项全部通过
git diff --check 0 通过
  • 完整日志:pr-7079-verify-typecheck2.log / pr-7079-verify-tests.log / pr-7079-verify-smoke.log / pr-7079-verify-scope.log / pr-7079-verify-full-mobile.log / pr-7079-verify-diffcheck.log(同目录)。
  • 未执行:真实账号端到端、Android 实机、深色模式目检(描述已如实声明;本次无样式/主题改动,风险低)。UI 界面证据(截图/录屏/HTML)未附在 PR 正文(作者说明截图存于原任务、未上传公开附件)——按规则不阻断,已记非阻断提醒项。
  • CI:client-ci / pr-design-basis / PR #7079 三源全绿(context 双源判定 ci.status=pass)。
  • 机器人静默期:已等 41.4 分钟超时放行;copilot-pull-request-reviewer、chatgpt-codex-connector 对最终 head 尚未表态,其意见可能在合并后才到(Codex 对 2ae9c7c 的 Code/Security Review 均 Completed 且零 findings;Greptile 的唯一 P2 已修复)。

Intent alignment

  • 描述来源:PR 标题与当前 body(读取时间 2026-10-24T22:11Z 后本轮复核),原目标 = 「iPad / iPhone Duo 双栏任务列表顶部显示伙伴区(用户反馈缺伙伴),复用首页伙伴区能力,不改伙伴协议/身份/数据/原生配置」。
  • 初始实现:c53c65d56c544e8ac3785497b28e31856d48a8e3(基线 c335ab98fb09f4152bde1b26e1e4af9f627633f2),实际读取该 revision diff:HomeRosterProvider 从首页路由移入 MobileHome、内嵌列表解除 embedded ? null 隐藏、refreshHome 对内嵌同样刷新名册——即目标本身。
  • 待合并 head:2ae9c7c552c280bc56dc9d6814bca5dd376b2573;中间变更仅两轮缺陷修复与一次同步主干:
原目标/初始行为 最终行为与影响 代码/提交证据 变化依据或待确认问题
双栏任务列表顶部显示伙伴(初始 c53c65d5 即实现) 保持不变,且共用列表的抽屉宿主也显示伙伴 c53c65d5 + head HomeSurface.tsx ListHeaderComponent 一致,无变化
初始版本伙伴入口直接 useGuardedPush 跳转(bot 指出:抽屉不关、Android 返回多按一次) 改为注入宿主 guardedPush,先关抽屉卸载再派发路由 1d8e1a48b5afa774de1a02f4ae8b863ea8216769;thread #7079 (comment) 、#discussion_r4368477462 同一目标内的缺陷修复(Greptile P2 / Codex P1 意见,作者已回帖修复并 Resolve),非产品方向变化
退场期二次选择会写偏好但路由被「首个意图获胜」丢弃(打开 A 记住 B) 抽屉退场期统一停用触摸与无障碍操作,首次意图保持 2ae9c7c552c280bc56dc9d6814bca5dd376b2573;thread #7079 (comment) (useTeammateNavigation.ts:22) 同一目标内的缺陷修复(Codex P2 意见,作者以统一不变量修复并 Resolve)
同步主干(b1794a2a merge main 325a1a85) diff 范围不变,未夹带主干内容 b1794a2a08048112c2b0f542e2bf0ff7bb91f6e5 常规同步,不算扩范围
  • 结论:一致。核心功能(伙伴显示位置、复用首页能力、名册按账号代次重建、焦点订阅)全部保留;两轮 bot 意见的修复均在原目标内且增强了抽屉导航一致性,未删除/削弱/反转承诺行为,无无关扩范围(无新依赖、无协议/配置/原生改动)。已 Resolve 的 Codex / Greptile 要求逐条核对最终 diff:drawer coordinator 路由(已落实:push 贯穿全部伙伴入口)、退场期输入停用(已落实:open 判据统一)。无存疑项。

Overall — pass

0 P0/P1,原意一致性复核通过,无待裁定的核心方向问题。CI 全绿、thread 全部 Resolve、维护者确认门已由 zqchris 的 Approve 放行(product 触发),可以进入受保护的 Approve 与合并。

@MagicLizi
MagicLizi merged commit 49c7241 into main Oct 24, 2026
23 of 24 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