Files
orisys-app/apps/autocal/docs/capture-workflow-tasks.zh.md
T
ykcheungab 06e06126ca 重构 Autocal 采集页:单一队列与控制器驱动的主按钮
选点、对准、加载与录像分散在两个面板,状态靠隐藏相位判断。现改由不依赖 Qt 的采集控制器驱动,并加入录像选项、汇总平铺副本、保持到时自动结束、会话结束回到空闲,以及无设备时的模拟采集。已运行 Autocal 非 Qt 测试并通过范围内门禁;界面测试待 Windows 复核,未做实机验收。
2026-10-18 16:04:32 +08:00

7.3 KiB
Raw Blame History

标定采集页重构:DeepSeek 代理执行清单

状态:2026-10-18 计划,W0–W4 已完成(P0–P6 全部实施)。仅软件验证:独立验收无阻断,2 项重要 + 1 项次要已修复并复核通过;V10 实机验收未执行。阶段定义、入口与出口条件、统一验证见主计划;本页只规定由谁执行、按什么顺序执行、交付什么。复选框记录实际完成情况。

主代理指令

开始前先读工作区 AGENTS.md、docs/AUTHORING.md、docs/platform/engineering-workflow.md 和主计划,再重新检查 app 与工作区根的分支、HEAD、index 和工作树。已有的 motion/service.py、record_diagnostics.py 改动以及根仓库 scripts/finger_multical/ 的改动都不属于本任务,不得覆盖。

不得连接真实控制器、移动平台或加载;不得提交、推送、暂存或改写历史。D1、D2 未经用户确认时,停在相应阶段并报告。

scratch 统一放在 .scratch/autocal-capture-workflow/;运行期间保留 .active 标记,每次 pytest 用新的 --basetemp 并加 -p no:cacheprovider。

主代理负责以下文件的最终合并:

  • 接口:capture_controller.py 的公共 API、recording_options.py 的结构;
  • 共享文件:ui/window.py、preferences.py、config/preferences.default.json、两份 locale 文件、docs/。

子代理需要改这些文件时,先把改动交给主代理,由主代理串行合入。

角色

角色 负责阶段 可改文件 不可改
主代理 P0、接口冻结、合并、P6 文档、交接 上面列出的共享文件 —
A 数据与文件 P1、P2 ui/reveal.py、summary_export.py、recording_options.py、capture_guard.py、summary.py、session_review.py,trial.py 与 multipoint.py 中构造 RecordConfig 的两行,以及相应测试 状态机、界面布局、shared/
B 控制器 P3 capture_controller.py、tests/test_capture_controller.py;multipoint.py 只允许为控制器暴露只读属性 任何 ui/ 文件
C 界面 P4,之后 P5 ui/calibration_panel.py、ui/multipoint_panel.py、ui/sensor_panel.py、ui/finger_source_panel.py、新增的 ui/* 组件,以及相应 UI 测试 控制器逻辑、数据格式
D 编码验证 P2b 只在 scratch 中写脚本和报告 产品代码
V 验收 最终验收 只读;可在 scratch 中写报告 任何产品文件

同一时间最多 3 个实现子代理在工作。控制器 API 冻结前,C 只能对着主代理给出的桩接口开发。

执行顺序

W0  主代理 P0 + 冻结 CaptureController / RecordingOptions 接口
W1  A: P1 → P2      B: P3      D: P2b        (三者并行)
W2  C: P4(需要 P1、P3;P2 合入后补 Ready 行的录像标签)
W3  C: P5           主代理: P6 文档;可选的批次导出交给 A
W4  V: 独立验收 → 主代理修复 → V 复核修复项

检查点 1 在 W1 结束时:P1、P2、P3 的 V1–V3 全部通过,才允许开始 W2。检查点 2 在 W3 结束时:V1–V8 全部通过,才交给 V。

任务清单

W0 主代理

  • P0 基线:记录 HEAD、工作树状态和基线测试结果到 scratch/baseline.md。
  • 冻结接口,写入 scratch/interfaces.md:readiness()、primary_action()、perform()、secondary_actions()、poll() 的签名、返回结构和动作键清单;RecordingOptions 的字段与 session.json 中 recording 块的结构。(实施中按缺口三次修订:1.4.1 对准阶梯、1.8/1.10 队列字段与编辑、1.11 补口。)

A 数据与文件

交接提示:你负责让用户能找到数据、能控制视频体积。不得改变原始目录结构、不得删除或移动已有录像;summary 副本只是方便查看,指针仍是唯一权威。

  • P1:reveal 提取与三个按钮(按钮的布局由 C 在 P4 完成;A 在 P1 先接到现有会话行),summary/ 平铺副本及失败处理。测试:test_summary_export.py 增加副本一致性、副本失败两项,新增 test_reveal.py。
  • P2:录像选项、工厂函数、recording 块、video_expected 判定、编码探测、体积估算。测试:test_multipoint_recording.py 增加关视频完成、编码不可用两项;test_summary.py 增加关视频行 eligible、旧会话不变两项;test_preferences_isolation.py 覆盖新的偏好键。(体积估算与探测界面由 C 在 P4 实现。)

B 控制器

交接提示:你负责把流程判断从界面中移出。控制器不得发出运动命令、不得导入 Qt;对准只发出请求。每个禁用的动作必须带原因,原因文字通过 locale 键给出。

  • P3:实现控制器及表驱动测试;用同一组输入比较“直接驱动 Campaign”与“经由控制器”写出的文件结构。

C 界面

交接提示:你负责重排界面,依据是设计稿与主计划 P4、P5。界面只渲染控制器的输出;不得在 ui/ 中判断 campaign.phase。实时图与 UV 图必须能同时看到。

  • P4:新布局、更改输入对话框、队列表模型、当前点卡片、消息行;在模拟模式下用界面测试走完两点;截图存 scratch。
  • P5:Finger debug 改名并瘦身,测点表迁移,安装偏置变化后重新求解。

D 编码验证

  • P2b:按主计划完成对比并写报告,内容包括输入文件、编码参数、逐帧差值统计和窗口均值差占 1 N 阶跃的比例。不给结论性推荐,由用户决定。

V 验收

  • 用新进程跑完主计划 V1–V8;按严重度列出发现,每条附复现步骤;不修改代码。

子代理交付格式

每个任务结束时交回以下内容:

  1. 改动文件清单;
  2. 新增测试,以及它们在修复前失败的证据(可行时);
  3. 实际执行的命令和结果(复制输出摘要,不改写);
  4. 未验证项及原因;
  5. 接口变化;没有就写“无”。

不得把跳过、未运行或环境缺失写成通过。

主代理最终交接

  • 所有改动保持未暂存;每个改动过的仓库各写 .scratch/autocal-capture-workflow/commit-message.txt,按 AGENTS 第 7 条给出单行的 git add 和 git commit -F 命令。(本任务只改 orisys-app。)
  • 列出需要排除的既有改动。
  • 状态写为“仅软件验证,待实机验收”;V10 实机验收需要用户指定设备、运动与载荷范围以及停机条件。

需要排除的既有改动(不属于本任务)

orisys-app 工作树里这些改动在任务开始前就存在,提交时必须排除:apps/autocal/src/orisys_autocal/motion/service.py、 apps/autocal/src/orisys_autocal/record_diagnostics.py;未跟踪的 LZ.*.zip、LZ.LigMaster V1.7.0/、 LZ.Devpack_L826(六维力非标设备包)(1)/、docs/test-execution-plan.zh.md。

任务运行期间还有并行会话改了工作区其他部分,同样不属于本任务:apps/studio/** 与 shared/src/orisys_app_shared/theme/qss.py(另一个 Studio 评审会话)、工作区根的 docs/README.md 与 docs/inventory.json、orisys-sdk 的 HEAD(f7f4682 → ff7614a,只改 calibration.py)。因此全仓 lint_gate 的 status: FINDINGS 来自这些外部改动,本任务范围内的文件是 status: clean。