Files
Agent-System/.doc/archive/ops/2026-09-13-document-revision-editor-hydration-race.md
T
weichenandCursor 9345109dca docs(ops): archive completed document-revision session files
Move done DOCREV short-terms, checklists, and handoffs into archive/ops and retarget relative links after Round20 close-out.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 00:27:18 +00:00

3.0 KiB
Raw Blame History

title, status, created, updated, owner, branch, worktree, mutex
title status created updated owner branch worktree mutex
编辑弹窗 hydration 竞态修复 done 2026-09-13 2026-09-14 Cursor-Auto fix/document-revision-editor-hydration-race - document-revision-editor-hydration-race

编辑弹窗 hydration 竞态修复

目标

堵住第十二轮 UI-06:编辑弹窗打开期间后台 hydration 换块 ID,保存静默关窗且不发 PATCH。用户编辑期间与 PATCH 成功后,迟到 hydration 不得覆盖基线;找不到块 fail-closed。

范围

  • web/src/lib/controlledDocHydrate.ts:fetchRevisionState 保留 head_block_map,hydrate 后 applyHeadBlockMap
  • web/src/lib/editorHydrationGate.ts 与单测(迟到响应不得覆盖 PATCH 成功正文)
  • web/src/lib/blockSavePolicy.ts 与单测(stale-id / doc 绑定 / 切文档 fail-closed)
  • web/src/lib/saveControlledBlockEdit.ts:App 真实调用的 PATCH 编排(可注入 patch API)
  • web/src/App.tsx:editorSession、关窗续跑、切文档 fail-closed
  • audit / remediation / CURRENT 认领

非目标

  • 不修改、移动、删除或提交 .doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/
  • 不合 dev、不 push、不启动/重建 Docker
  • 不运行或伪造真实 UI/E2E;不得声称 UI-06 已通过
  • 不改 FEATURE-MATRIX 完成度;不削弱 ETag/409

步骤

  1. 从 dev@4c465d2 开 fix/document-revision-editor-hydration-race,mutex 不与现有 in_progress 冲突
  2. 定位全部会在弹窗打开期间替换 AST 的路径(effect / 选文档 / 重试;lease 改 deliverables 触发 effect)
  3. hydrate 对齐 head_block_map + generation token / 编辑门闩 + stale-id fail-closed
  4. 单测:同 map ID 稳定、缺 map 仍随机、deferred hydrate、stale id、迟到 hydrate、PATCH ETag、409
  5. web npm test / build(首轮)
  6. 独立审查补强:真实 PATCH 编排测试、editorDocId 绑定、关窗续跑、切文档 fail-closed
  7. 真实 UI-06 重跑(本轮不做)

验收标准

  • 编辑中不因后台 hydration 换 ID 而静默丢稿(逻辑门闩 + 单测)
  • 找不到目标块保留编辑器并提示
  • 现场 r0→r1(未跑 E2E,保持未勾选)

相关链接

证据 / 备注

  • mutex:document-revision-editor-hydration-race(新 mutex,未占用 document-revision-save-selector 等 in_progress 行)
  • 基线:dev@4c465d2
  • 验证:补强后全量 npm test + npm run build 通过;saveControlledBlockEdit 断言一次 PATCH
  • 未跑真实 UI-06,不得标 done