Skip to content

fix(studio): TML-815 explain camera track takeover - #16

Merged
SeasonsChange422 merged 6 commits into
mainfrom
fix/TML-815-camera-control-takeover
Sep 4, 2026
Merged

fix(studio): TML-815 explain camera track takeover#16
SeasonsChange422 merged 6 commits into
mainfrom
fix/TML-815-camera-control-takeover

Conversation

@SeasonsChange422

@SeasonsChange422 SeasonsChange422 commented Sep 4, 2026

Copy link
Copy Markdown
Member

目标

修复启用轨道接管摄像机时的视口右键行为,并让用户明确了解机位操控被禁用的原因和解除方式。

变更范围

  • 在 3D 视口统一阻止浏览器 contextmenu;通过 event.composedPath() 识别 open ShadowRoot 内的视口事件,从视口开始的右键手势拖出后释放仍会被抑制。
  • 将右键按下手势与释放后等待菜单的状态分离;正常状态由 pointeruppointercancelcontextmenu、失焦和新指针序列清理,5 分钟 TTL 仅处理丢失终止事件的异常指针流。
  • 每次新 pointerdown 先完整清除旧 active、pending 与两类 timer,再仅按本次事件是否为视口内、非交互控件右键重新 arm,避免丢失终止事件的旧手势污染下一次视口外独立右键。
  • 抽取共享 blocker 解析,独立聚合导出、覆盖确认、录制暂停、播放和当前 POV 的启用相机轨道,并为每项列出自己的解除条件。
  • 导出运行时明确提示“先取消或等待完成,再关闭导出”,与播放、轨道接管提示并列展示;关闭按钮的禁用状态与文案一致。
  • 明确 AC2 的“选中摄像机”指当前 POV(导演视图使用独立导演相机),对象树 selection 不会误报为被接管机位。
  • 真实浏览器回归等待 RAF/位姿稳定帧,显式断言导出手势命中覆盖层,并独立比较底层视口位姿未变化。
  • 已同步 main 的治理 bootstrap 合并提交 665ba51ad5dc141f95e7073873c8e6532229ec11;本 PR 相对 main 不包含治理文件。

验收标准

  • 视口内真实右键按下、移动和释放不会弹出浏览器上下文菜单;open ShadowRoot 中从视口拖出后释放同样被抑制。
  • 超过 2 秒的正常长按不会因 TTL 失效;终止事件会清理手势,后续视口外独立右键不被误抑制。
  • 孤立的视口 pointerdown 后,新视口外真实右键在 Chromium、Firefox、WebKit 均会放行。
  • 当当前 POV 被播放、导出或启用轨道接管时,机位操控区并列显示所有 blocker 及各自解除条件。
  • 导出运行中关闭按钮不可用,提示明确要求先取消或等待完成,再关闭导出。
  • POV 空闲时真实右键拖动旋转位姿;轨道接管、播放和导出时位姿保持不变,解除 blocker 后恢复。
  • 导出场景确认手势命中覆盖层,并另外证明底层视口状态不改变位姿。
  • 同步治理 bootstrap 后,相对 main 的 diff 仅含 10 个已复核产品/测试文件;产品树与复核 PASS 的 fd2acbd0f37ffdd825ea6ad91019aa5a5f007e0c 完全一致。

测试结果

  • python -m unittest discover -s .github/scripts -p "test_*.py":5/5 通过。
  • npm test:通过。
  • npm run build:通过。
  • npx vitest run packages/studio/test/camera-drive-routing.test.tsx:47/47 通过。
  • npx playwright test e2e/timeline.spec.ts --project=chromium --project=firefox --project=webkit -g "real right-drag|ShadowRoot viewport|long-held|orphaned viewport":12/12 通过。
  • npm run typecheck -w @lumora/studio:通过。
  • npx eslint . --ignore-pattern e2e/_review-a11y-temp.spec.ts:0 error,4 条既有 Fast Refresh warning;未跟踪的审查临时文件不属于本 PR。
  • git diff --check:通过。
  • GitHub head dec0e2a096c04894856662713f434ee9e0f57a0ccigit-governance 均通过。

风险和回滚

风险集中在跨 ShadowRoot 的窗口级右键事件顺序、导出运行态提示及 E2E 稳定帧等待。仓库治理 bootstrap 已通过独立 PR #17 合入 main,当前分支通过双亲合并提交同步该可信基线,不修改或绕过 Ruleset。若出现回归,可整体 revert 本 PR 的 squash merge commit;不会涉及数据迁移或持久化格式变更。

SeasonsChange422 and others added 4 commits September 4, 2026 15:31
Multica-Task: TML-815

Multica-Run: d18471e3-5eed-4ad0-ab3b-17f450e8fc3b
Co-authored-by: multica-agent <github@multica.ai>
Multica-Task: TML-815

Multica-Run: dace7cab-5122-4064-b0a1-25fd24c237e7
Co-authored-by: multica-agent <github@multica.ai>
Multica-Task: TML-815

Multica-Run: 8d4be96f-1670-4bcc-9c1d-ab8c17a5ba25
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: multica-agent <github@multica.ai>
@SeasonsChange422
SeasonsChange422 marked this pull request as ready for review September 4, 2026 13:41
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: multica-agent <github@multica.ai>
@TML-BOT

TML-BOT commented Sep 4, 2026

Copy link
Copy Markdown

PR 规范检查结果

状态:通过
Head SHA:dec0e2a096c04894856662713f434ee9e0f57a0c
策略版本:3

通过:

  • 目标分支为默认分支 main
  • 分支名 fix/TML-815-camera-control-takeover 匹配策略 ^(ai|feat|fix|refactor|chore)/.+$
  • PR 标题包含与正文元数据完全一致的 task_idTML-815),满足 require_task_id_in_pr_title
  • PR 正文包含必需的 task_idTML-815)与 run_id 元数据
  • 必需检查 ci:通过
  • 必需检查 git-governance:通过
  • 无合并冲突
  • 分支与目标分支保持最新

下一步:无需进一步操作。本评论不阻止合并;最终合并资格由原生 cigit-governance 与分支保护决定。

@SeasonsChange422
SeasonsChange422 merged commit 54979a2 into main Sep 4, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants