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

106 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 标定采集页重构:DeepSeek 代理执行清单
状态:2026-10-18 计划,W0–W4 已完成(P0–P6 全部实施)。**仅软件验证**:独立验收无阻断,2 项重要 + 1 项次要已修复并复核通过;V10 实机验收未执行。阶段定义、入口与出口条件、统一验证见[主计划](capture-workflow-plan.zh.md);本页只规定由谁执行、按什么顺序执行、交付什么。复选框记录实际完成情况。
## 主代理指令
开始前先读工作区 `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 只能对着主代理给出的桩接口开发。
## 执行顺序
```text
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 主代理
- [x] P0 基线:记录 HEAD、工作树状态和基线测试结果到 `scratch/baseline.md`。
- [x] 冻结接口,写入 `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 副本只是方便查看,指针仍是唯一权威。
- [x] P1:`reveal` 提取与三个按钮(按钮的布局由 C 在 P4 完成;A 在 P1 先接到现有会话行),`summary/` 平铺副本及失败处理。测试:`test_summary_export.py` 增加副本一致性、副本失败两项,新增 `test_reveal.py`。
- [x] P2:录像选项、工厂函数、`recording` 块、`video_expected` 判定、编码探测、体积估算。测试:`test_multipoint_recording.py` 增加关视频完成、编码不可用两项;`test_summary.py` 增加关视频行 eligible、旧会话不变两项;`test_preferences_isolation.py` 覆盖新的偏好键。(体积估算与探测界面由 C 在 P4 实现。)
### B 控制器
交接提示:你负责把流程判断从界面中移出。控制器不得发出运动命令、不得导入 Qt;对准只发出请求。每个禁用的动作必须带原因,原因文字通过 locale 键给出。
- [x] P3:实现控制器及表驱动测试;用同一组输入比较“直接驱动 `Campaign`”与“经由控制器”写出的文件结构。
### C 界面
交接提示:你负责重排界面,依据是设计稿与主计划 P4、P5。界面只渲染控制器的输出;不得在 `ui/` 中判断 `campaign.phase`。实时图与 UV 图必须能同时看到。
- [x] P4:新布局、更改输入对话框、队列表模型、当前点卡片、消息行;在模拟模式下用界面测试走完两点;截图存 scratch。
- [x] P5:Finger debug 改名并瘦身,测点表迁移,安装偏置变化后重新求解。
### D 编码验证
- [x] P2b:按主计划完成对比并写报告,内容包括输入文件、编码参数、逐帧差值统计和窗口均值差占 1 N 阶跃的比例。不给结论性推荐,由用户决定。
### V 验收
- [x] 用新进程跑完主计划 V1–V8;按严重度列出发现,每条附复现步骤;不修改代码。
## 子代理交付格式
每个任务结束时交回以下内容:
1. 改动文件清单;
2. 新增测试,以及它们在修复前失败的证据(可行时);
3. 实际执行的命令和结果(复制输出摘要,不改写);
4. 未验证项及原因;
5. 接口变化;没有就写“无”。
不得把跳过、未运行或环境缺失写成通过。
## 主代理最终交接
- [x] 所有改动保持未暂存;每个改动过的仓库各写 `.scratch/autocal-capture-workflow/commit-message.txt`,按 AGENTS 第 7 条给出单行的 `git add` 和 `git commit -F` 命令。(本任务只改 `orisys-app`。)
- [x] 列出需要排除的既有改动。
- [x] 状态写为“仅软件验证,待实机验收”;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`。