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>
3.9 KiB
3.9 KiB
title, status, created, updated, owner, branch, worktree, mutex
| title | status | created | updated | owner | branch | worktree | mutex |
|---|---|---|---|---|---|---|---|
| 项目 reviewer 同步到受控文档职责 | done | 2026-09-13 | 2026-09-14 | Cursor-Auto | fix/document-revision-reviewer-duty-sync | - | document-revision-reviewer-duty-sync |
项目 reviewer 同步到受控文档职责
目标
堵住第17轮 UI-13a:UI-01 已把 USER_B 设为 reviewer,但 doc_proj6145_intake 矩阵为 viewer。项目创建时的 reviewer 必须成为后续每份受控文档的权威 reviewerId。
范围
project_members.document_duty迁移与成员 upsert- 任务生成/账本创建解析项目职责;禁止硬编码 2/3
- 已有文档缺失/非成员占位的服务端自愈
- 前端立项 persist
document_duty+ 职责互斥 - audit / remediation / CURRENT
非目标
- 不 merge、不启停/重建容器、不跑/声称真实 UI E2E、不 push
- 不删不改证据目录
- 不向用户索要 token;不提交账号密码
步骤
- 从
dev@639969f开分支并登记 mutex - RED/GREEN:解析、自愈、成员 duty、前端映射
gofmt/go vet/go test -short/ 相关-race/npm test/npm run build- 原子提交
- 独立审查收紧(暂不合入):Heal 以 assigned 为权威;成员变更带 duty 并同步文档;缺 role 不降 owner;写权精确断言;迁移多 owner 确定回填;并发 upsert PG 用例;自愈失败不假成功
- 最后一轮:移出成员 sync + 前端刷新;空 assigned 只清失效 holder;显式 revoke 再 heal;账本创建失败不成功
- 补充审查:lock + 读旧/冲突 holder + 成员写 + 精确清槽同事务;提交后 heal;失败仍
ERR_DUTY_SYNC - Heal 与成员写共用
pg_advisory_xact_lock(project_id);解析与文档读写同事务;确定性并发 PG 证明旧 reviewer 不复活
验收标准
- A=author、B=reviewer、C=none;第二文档继承;重复执行幂等;旧文档缺失回填
- 服务端写操作仍按权限拒绝
- 前端不按名字提升
- 现场 UI-13a(未跑)
相关链接
- Audit: ../../audit/2026-09-13-document-revision-reviewer-duty-sync.md
- Remediation: ../../remediation/2026-09-13-document-revision-reviewer-duty-sync.md
- Checklist: ../checklists/2026-09-13-document-revision-reviewer-duty-sync.md
- Handoff: ../handoffs/2026-09-13-document-revision-reviewer-duty-sync.md
证据 / 备注
- mutex:
document-revision-reviewer-duty-sync(新 mutex,不占用已有 in_progress) - 基线:
dev@639969f - 证据(只读):
.doc/test-reports/assets/2026-09-13-document-revision-runtime-ui/schema30-ui13a-reviewer-duty-sync-failure/ - 验证(原子清槽轮):
gofmt/go vetPASS;go test -short ./...PASS;相关-racePASS;npm test/buildPASS;隔离 PG PASS - 原子性:成员写与
HealProjectDocuments均先pg_advisory_xact_lock(project_id),再在同一事务内读成员/文档并更新;旧 heal 不能在转移提交后把 reviewer A 写回 - PG 集成已写 heal/空 assigned/多 owner 回填/并发 upsert;
-short或无TEST_DATABASE_URL时跳过 - 隔离跑法:
scripts/run-isolated-duty-sync-pg-tests.sh(TEST_DATABASE_URL或PG_ADMIN_URL建临时库)。拒绝agent_system_dev - 本轮已在已运行的 context Postgres 上
CREATE DATABASE agent_duty_sync_itest_*,串行跑通后DROP;未env-service、未动共享库数据 - 兼容:旧二进制不读
document_duty仍可运行;新代码在 assigned 为空时不臆造 reviewer。6145 的 B 仍是空 duty,须再走成员 API - 未跑真实 UI-13a,不得标 done;不得 merge / 启停容器 / E2E / push