docs: claim UI-11 routing and lease gap in_progress

Record the tenth-round routing/lease failure, request-scoped release tradeoff, and CURRENT claim without marking the task done.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-13 18:42:44 +00:00
co-authored by Cursor
parent bdd1b35b86
commit 9a9e25806c
4 changed files with 142 additions and 2 deletions
@@ -0,0 +1,45 @@
---
title: "UI-11 第二份文档路由到 intake 且 human lease 残留"
status: in_progress
created: 2026-09-13
updated: 2026-09-13
severity: high
---
# UI-11 第二份文档路由到 intake 且 human lease 残留
## 现象
第十轮真实 UI(schema 30):
- UI-00~UI-10 **PASS**
- UI-11 页面输入:请另行生成一份《系统设计输入》受控文档(第二份),不要覆盖上一份需求文档,并给出可打开的交付物。
- 页面回复《用户初始需求收集表》正由其他用户编辑/生成中,**未启动任务**
## 根因分析
| 层 | 问题 |
|---|---|
| 路由 | `resolveTaskKeyFromMessage` 写意图后先扫「需求\|摸底\|用户\|首轮」,否定句「不要覆盖上一份**需求**文档」压过正向点名「系统设计输入」 |
| 别名 | `NAMED_DELIVERABLE_ALIASES.prelim_design` 只有「初步设计说明书 / 系统设计规格」,缺「系统设计输入」(模板正式标题是「系统初步设计方案」) |
| 租约 | PATCH 在 `AssertHumanCanEdit` 后持 15min human lease;本 UI 无 heartbeat/token。成功 / 409 / 投影失败都不释放,intake 被锁,小队再跑 intake 得 DOC_BUSY |
| E2E | UI-11 `sendChat` 后直接 `waitForSquadCompletion`,没有 `tasks/runs` 202 门闩;同步 busy completed 可能被当成成功 |
## 严重度
`high`
## 关联整改
- Remediation: [../remediation/2026-09-13-document-revision-second-doc-routing-lease.md](../remediation/2026-09-13-document-revision-second-doc-routing-lease.md)
- Short-term: [../ops/short-term/2026-09-13-document-revision-second-doc-routing-lease.md](../ops/short-term/2026-09-13-document-revision-second-doc-routing-lease.md)
- 分支: `fix/document-revision-second-doc-routing-lease`
## 证据
- Evidence root(已归档、本轮勿提交):`.doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui11-second-doc-routing-human-lease-failure/`
## 开放问题
- 占槽后真实 UI-11 重跑;本任务保持 `in_progress`,不得标 `done`
- 请求级租约:同用户双窗 ETag 冲突靠 If-Match,不靠租约互斥(同 `holderID` 会续租)
+4 -2
View File
@@ -1,11 +1,11 @@
# 当前焦点
**更新**: 2026-09-13
**production_ready**: no(DOCREV:schema **30**;第九轮 UI-07 transition 中间帧取样;不操作容器)
**production_ready**: no(DOCREV:schema **30**;第十轮 UI-11 路由+lease;不操作容器)
## 焦点
1. **DOCREV-RT**: [E2E 等 overlay CSS transition 结束后再取样](short-term/2026-09-13-document-revision-e2e-overlay-transition.md)(`fix/document-revision-e2e-overlay-transition`:禁止短 sleep / 禁 transition;不重跑 E2E / 不操作容器;仍 `in_progress`)
1. **DOCREV-RT**: [UI-11 点名优先路由 + PATCH 请求级释租](short-term/2026-09-13-document-revision-second-doc-routing-lease.md)(`fix/document-revision-second-doc-routing-lease`:不改 prompt / 不重跑 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
@@ -26,6 +26,7 @@
| 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 |
| Cursor-Auto | document-revision-e2e-overlay-transition | fix/document-revision-e2e-overlay-transition | - | document-revision-overlay-transition | in_progress |
| Cursor-Auto | document-revision-second-doc-routing-lease | fix/document-revision-second-doc-routing-lease | - | document-revision-second-doc-routing-lease | in_progress |
> 新任务开始前登记。`branch` 必须为 `feature/<slug>` 或 `fix/<slug>`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。
@@ -69,3 +70,4 @@
| 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) |
| UI-07 transition 中间帧取样审计 | [../audit/2026-09-13-document-revision-overlay-transition.md](../audit/2026-09-13-document-revision-overlay-transition.md) |
| UI-11 第二份文档路由与 lease 审计 | [../audit/2026-09-13-document-revision-second-doc-routing-lease.md](../audit/2026-09-13-document-revision-second-doc-routing-lease.md) |
@@ -0,0 +1,50 @@
---
title: "UI-11 点名优先路由 + PATCH 请求级释租"
status: in_progress
created: 2026-09-13
updated: 2026-09-13
owner: Cursor-Auto
branch: fix/document-revision-second-doc-routing-lease
worktree: "-"
mutex: document-revision-second-doc-routing-lease
---
# UI-11 点名优先路由 + PATCH 请求级释租
## 目标
第十轮 UI-11 首错:否定句「需求」压过「系统设计输入」,且 PATCH 残留 human lease 使小队 DOC_BUSY。点名优先 + 请求级 defer 释租 + E2E 202 门闩。不得将本任务标 `done`。
## 范围
- `web/src/engine/templateMatch.ts` + 单测
- `internal/server/document_revision_handlers.go` + `document_revision_patch_order_test.go`
- `web/e2e/document-revision-runtime.spec.ts` UI-11 waiter
- 文档:audit / remediation / CURRENT
## 非目标
- 不改 E2E prompt;不改 `SaveDocumentContent` 内部释租
- 不触碰/提交 `.doc/test-reports/assets`;不操作容器;本轮不重跑 E2E
- 不改 FEATURE-MATRIX;不合 `dev`;不 push
## 步骤
1. [x] 认领 CURRENT(mutex `document-revision-second-doc-routing-lease`)
2. [x] 点名优先 +「系统设计输入」别名 + 单测
3. [x] PATCH 已授权后 defer 释租(成功 / 409 / 投影失败)+ 服务端测试
4. [x] UI-11 send 前 `tasks/runs` waiter,断言 202 后再 wait completion
5. [ ] 占槽后真实 UI 重跑(本轮不做)
## 验收标准
- [x] UI-11 原文 / 混合句 → `prelim_design`;当前文档钉住、UI-05 pin、首轮摸底仍 intake
- [x] PATCH 后无 human lease,squad 可获取
- [x] UI-11 非 202 即 fail;`requireInflight` 拒绝同步 busy
- [ ] 真实 UI-11 PASS 后才可将本任务标 `done`
## 相关链接
- Audit: [../../audit/2026-09-13-document-revision-second-doc-routing-lease.md](../../audit/2026-09-13-document-revision-second-doc-routing-lease.md)
- Remediation: [../../remediation/2026-09-13-document-revision-second-doc-routing-lease.md](../../remediation/2026-09-13-document-revision-second-doc-routing-lease.md)
- Evidence: [../../test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui11-second-doc-routing-human-lease-failure](../../test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui11-second-doc-routing-human-lease-failure)
@@ -0,0 +1,43 @@
---
title: "UI-11 点名优先路由 + PATCH 请求级释租"
status: in_progress
created: 2026-09-13
updated: 2026-09-13
---
# UI-11 点名优先路由 + PATCH 请求级释租
## 背景
链到 [../audit/2026-09-13-document-revision-second-doc-routing-lease.md](../audit/2026-09-13-document-revision-second-doc-routing-lease.md)。第十轮 UI-11 首错:否定句里的「需求」压过「系统设计输入」,且 PATCH 残留 15min human lease 使小队 DOC_BUSY。
## 目标
1. 明确点名交付物优先于否定背景关键词;`prelim_design` 增加「系统设计输入」别名。
2. PATCH 在已授权获取 human lease 后 `defer` 释放(成功 / 409 / 投影失败)。
3. UI-11 E2E 在 send 前建立 `tasks/runs` waiter,断言 HTTP 202 后再等 completion。
## 分波次计划
| 波次 | 内容 | 验收 |
|------|------|------|
| Wave 0 | `NAMED_DELIVERABLE_ALIASES` + `resolveTaskKeyFromMessage` / `resolveTaskTemplateForMessage` 点名优先 | UI-11 原文 → `prelim_design`;pin / UI-05 / 首轮摸底仍 intake |
| Wave 0 | PATCH handler `defer ReleaseLease`(不持 `e.mu`) | 成功 / 409 / 投影失败后无 human lease,squad 可 `AcquireLease` |
| Wave 0 | UI-11 send 前 waiter + 断言 202 | DOC_BUSY 不是 202;`requireInflight` 拒绝同步 busy completed |
## 取舍
- **请求级租约**:本 UI 无长会话 heartbeat。同用户双窗 ETag 冲突靠 If-Match,不靠租约互斥(同 `holderID` 会续租)。持有期间他人/squad 仍 busy。`AssertHumanCanEdit` 失败路径本来就不持 lease。
- 本轮不改 `SaveDocumentContent` 内部释租;不改 E2E prompt。
## 验收标准
- [x] 点名优先 +「系统设计输入」别名 + `templateMatch` 单测
- [x] PATCH defer 释租 + 服务端测试(成功 / 409 / 投影失败)
- [x] UI-11 202 门闩;不改 prompt
- [ ] 占槽后真实 UI-11 PASS 才可将本任务标 `done`
## 相关链接
- Audit: [../audit/2026-09-13-document-revision-second-doc-routing-lease.md](../audit/2026-09-13-document-revision-second-doc-routing-lease.md)
- Short-term: [../ops/short-term/2026-09-13-document-revision-second-doc-routing-lease.md](../ops/short-term/2026-09-13-document-revision-second-doc-routing-lease.md)