# 审批 + 表单模块 — 待办清单

> 来源：PR #208（feature/approval-form-polish）合入后的剩余项盘点。
> 维护方式：每个 bucket 一个 .md 文件；完成后 commit 时一并删除该文件 + 更新 `docs/modules/approval-form-coverage-matrix.md`。
> 状态：当前模块 ~83% 实现 / ~78% 测试覆盖；P0 全清；以下为剩余 P1 + 中长期补遗。

## Bucket 索引

| # | 文件 | 主题 | 优先级 | 估时 |
|---|---|---|---|---:|
| A | _completed_ | ~~L2 双语深度验证 + 字段属性 + i18n 一致性~~ ✅ 已完成（PR #214） | P1 | ✅ |
| B | _completed_ | ~~form-management L1 集成测试基线~~ ✅ 已完成（PR #214，35 测试） | P1 | ✅ |
| C | _completed_ | ~~多审批人/多节点/多审批模式 L2 验证~~ ✅ smoke 通过（发现 INITIATOR_MANAGER 解析失败 silent skip bug，详见 ERR-20260501-004） | P1 | ✅ |
| D | [D-webhook-bullmq.md](./D-webhook-bullmq.md) | Webhook 重试持久化（bullmq 接入） | P1 | 2d |
| E | [E-notification-uat.md](./E-notification-uat.md) | 通知链路 UAT 实跑（邮件/IN_APP/钉钉决策） | P1 | 0.5d + infra |
| F | _completed_ | ~~实例权限粒度细化（F11）~~ ✅ 已完成（PR #214） | P1 | ✅ |
| G | [G-form-designer-misc.md](./G-form-designer-misc.md) | 表单设计器小功能（复制/保存关闭/条件显示/计算字段） | P1-P2 | 3d |
| H | [H-overview-stats.md](./H-overview-stats.md) | 概览/统计 UI（M14 卡片 + 快捷入口） | P2 | 1d |
| I | [I-approval-engine-tail.md](./I-approval-engine-tail.md) | 审批引擎补遗（批量审批/减签/超时提醒/幂等键） | P1-P2 | 3d |
| J | [J-advanced-fields.md](./J-advanced-fields.md) | 高级字段 L2 测试（Related Form/Location/Seal/Word Template 等） | P2-P3 | 1.5d |
| K | [K-translation-template.md](./K-translation-template.md) | 翻译批量导出 / 机器翻译 | P2-P3 | 1d |

**总计剩余**：~12.5 天（A/B/C/F 已在 PR #214 完成，约 6.5 天）。如打成多个 PR 推进，建议参考 [PR-PLAN.md](./PR-PLAN.md)。

## PR #214 后浮出的 follow-up bugs（不在 PR-2 范围）

L2 验证过程中发现 4 个真问题，对应 4 个 ERR learning：

1. **ERR-20260501-001**：3 处 `events: { path: ['$'], array_contains }` PG 下永不命中（已在 PR-2 修）
2. **ERR-20260501-002**：worktree CONTAINER_PREFIX 错配 + 启动方式互斥（环境层，已记录）
3. ~~**ERR-20260501-003**：重提路径 unique 约束 silent failure~~ ✅ **已修复（PR #214）**：startApproval 复用旧 ID 重启 + 2 用例 L1
4. ~~**ERR-20260501-004**：多节点 silent skip + auto-APPROVED~~ ✅ **已修复（PR #214）**：流程挂起等管理员策略 + admin API resume-with-approvers + 5 用例 L1

另发现 1 个非 ERR 类 gap：
- **M11 前端 renderer 6 字段缺实现**（Rating / Serial Number / Address / Country/Region / Cascade Select / Signature / Rich Text）→ 应放 J bucket 或新 bucket
</content>
</invoke>