diff --git a/.doc/audit/2026-09-13-document-revision-overlay-selector.md b/.doc/audit/2026-09-13-document-revision-overlay-selector.md new file mode 100644 index 00000000..5203c2bf --- /dev/null +++ b/.doc/audit/2026-09-13-document-revision-overlay-selector.md @@ -0,0 +1,45 @@ +--- +title: "UI-07 纯净阅读用 overlay/class*block 找不到真实块" +status: in_progress +created: 2026-09-13 +updated: 2026-09-13 +severity: high +--- + +# UI-07 纯净阅读用 overlay/class*block 找不到真实块 + +## 现象 + +第八轮真实 UI(schema 30): + +- UI-00~UI-06 **PASS**(UI-06 `r0→r1` 且硬刷新持久) +- UI-07 `captureOverlayFingerprint(mode=pure)` 抛 `no block to sample computed style` + +## 根因分析 + +| 层 | 问题 | +|---|---| +| DOM | `BlockRenderer` 真实块是 `data-testid=document-block` 的 generic wrapper;无 `class` 含 `block` | +| overlay | `data-overlay-kind` 仅在 `overlayMode !== 'pure'` 且 hunk 命中时出现;纯净阅读该属性不存在 | +| 脚本 | pure 取样 `[data-overlay-kind], [class*="block"]`;manual/all 全页 `[data-overlay-kind]`,未限定活动文档 | + +`ManualChangeOverlay` 只是工具条 hint,不是块装饰。块装饰是同一 wrapper 上的 inline style。 + +同一 human hunk 在 manual/all 都是琥珀底,产品不保证两两不同。Checklist:UI-07 无装饰、UI-08 琥珀标记、失败标准是「三 overlay 视觉无差异」,不是强制 manual≠all。 + +## 严重度 + +`high` + +## 关联整改 + +- Short-term: [../ops/short-term/2026-09-13-document-revision-e2e-overlay-selector.md](../ops/short-term/2026-09-13-document-revision-e2e-overlay-selector.md) +- 分支: `fix/document-revision-e2e-overlay-selector` + +## 证据 + +- Evidence root(已归档、本轮勿提交):`.doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui07-pure-selector-failure/` + +## 开放问题 + +- 占槽后真实 UI-07/08/09 重跑;本任务保持 `in_progress`,不得标 `done` diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 17fffddf..975b2f75 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -1,11 +1,11 @@ # 当前焦点 **更新**: 2026-09-13 -**production_ready**: no(DOCREV:schema **30**;第七轮 UI-06 保存选择器未 PATCH;不操作容器) +**production_ready**: no(DOCREV:schema **30**;第八轮 UI-07 纯净阅读取样失败;不操作容器) ## 焦点 -1. **DOCREV-RT**: [E2E 块编辑 dialog 内精确保存](short-term/2026-09-13-document-revision-e2e-save-selector.md)(`fix/document-revision-e2e-save-selector`:禁止全页模糊 /保存/;不重跑 E2E / 不操作容器;仍 `in_progress`) +1. **DOCREV-RT**: [E2E 纯净阅读按 document-block 取样 overlay](short-term/2026-09-13-document-revision-e2e-overlay-selector.md)(`fix/document-revision-e2e-overlay-selector`:禁止 class*=block;不重跑 E2E / 不操作容器;仍 `in_progress`) 2. **CHAT**: [刷新恢复整改已实施](short-term/2026-09-13-chat-history-refresh-remediation.md)(待合 dev + PI E2E 补录) 3. **CI**: `TEST_DATABASE_URL` + 真实 PI E2E 实录;INTENT 发布 blocker 见 conversation-intent short-term @@ -24,6 +24,7 @@ | Cursor-Auto | document-revision-e2e-reject-routing | fix/document-revision-e2e-reject-routing | - | document-revision-runtime-ui | in_progress | | Cursor-Auto | document-revision-e2e-block-selector | fix/document-revision-e2e-block-selector | - | document-revision-block-selector | in_progress | | Cursor-Auto | document-revision-e2e-save-selector | fix/document-revision-e2e-save-selector | - | document-revision-save-selector | in_progress | +| Cursor-Auto | document-revision-e2e-overlay-selector | fix/document-revision-e2e-overlay-selector | - | document-revision-overlay-selector | in_progress | > 新任务开始前登记。`branch` 必须为 `feature/` 或 `fix/`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。 @@ -65,3 +66,4 @@ | 职责伪造与 ETag 覆盖审计 | [../audit/2026-09-13-document-revision-duty-etag-overwrite.md](../audit/2026-09-13-document-revision-duty-etag-overwrite.md) | | UI-06 块选择器失败审计 | [../audit/2026-09-13-document-revision-block-selector.md](../audit/2026-09-13-document-revision-block-selector.md) | | UI-06 保存选择器失败审计 | [../audit/2026-09-13-document-revision-save-selector.md](../audit/2026-09-13-document-revision-save-selector.md) | +| UI-07 纯净阅读取样失败审计 | [../audit/2026-09-13-document-revision-overlay-selector.md](../audit/2026-09-13-document-revision-overlay-selector.md) | diff --git a/.doc/ops/short-term/2026-09-13-document-revision-e2e-overlay-selector.md b/.doc/ops/short-term/2026-09-13-document-revision-e2e-overlay-selector.md new file mode 100644 index 00000000..e4f3daae --- /dev/null +++ b/.doc/ops/short-term/2026-09-13-document-revision-e2e-overlay-selector.md @@ -0,0 +1,51 @@ +--- +title: "E2E:纯净阅读按 document-block 取样 overlay" +status: in_progress +created: 2026-09-13 +updated: 2026-09-13 +owner: Cursor-Auto +branch: fix/document-revision-e2e-overlay-selector +worktree: "-" +mutex: document-revision-overlay-selector +--- + +# E2E:纯净阅读按 document-block 取样 overlay + +## 目标 + +第八轮 UI-07 首错:pure 模式用 `[data-overlay-kind],[class*=block]` 找不到真实块。在 `active-document-pane` 内对全部 `document-block` 取样真实样式/hunk;manual/all 不保证两两不同。不得将本任务标 `done`。 + +## 范围 + +- `web/e2e/document-revision-runtime.spec.ts`(UI-07 取样;UI-10 历史自动关闭;UI-16 text 选择器) +- `web/src/features/documentRevision/overlayMode.test.ts`(同一 human hunk 不保证 pairwise) +- 文档:audit / CURRENT + +## 非目标 + +- 不新建 policy 抽象;不改 overlay 视觉/业务 +- 不人为换块制造 manual≠all +- 不触碰/提交 `.doc/test-reports/assets`;不操作容器;本轮不重跑 E2E +- 不改 FEATURE-MATRIX + +## 步骤 + +1. [x] 认领 CURRENT(mutex `document-revision-overlay-selector`) +2. [x] UI-07 在 pane `document-block` 上取样 +3. [x] 按 checklist 校正三模式断言 +4. [x] UI-10 按抽屉自动关闭比较 +5. [ ] 占槽后真实 UI 重跑(本轮不做) + +## 验收标准 + +- [x] 禁止 `[class*=block]` / 全页 overlay 取样 +- [x] 纯净阅读必须无装饰;人工/全部必须有真实 hunk 装饰 +- [x] web tests + `tsc`/build + `git diff --check` +- [ ] 真实 UI-07/08/09 PASS 后才可将本任务标 `done` + +## 相关链接 + +- Audit: [../../audit/2026-09-13-document-revision-overlay-selector.md](../../audit/2026-09-13-document-revision-overlay-selector.md) +- Evidence: [../../test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui07-pure-selector-failure](../../test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui07-pure-selector-failure) +- Checklist: [../checklists/2026-09-13-document-revision-runtime-ui-acceptance.md](../checklists/2026-09-13-document-revision-runtime-ui-acceptance.md) +- 前序: [2026-09-13-document-revision-e2e-save-selector.md](./2026-09-13-document-revision-e2e-save-selector.md)