docs(test): record the multi-user workflow fix and dev smoke

The report keeps the 6579 document backfill, the live-edit switch rejection, and the rebuilt dev health check.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-21 05:31:02 +00:00
co-authored by Cursor
parent 87c6068da7
commit b9eb9460c0
5 changed files with 135 additions and 1 deletions
+2 -1
View File
@@ -13,6 +13,7 @@
| owner | task | branch | worktree | mutex | status |
|-------|------|--------|----------|-------|--------|
| Cursor | 2026-09-21-dev-multiuser-four-issues | fix/dev-multiuser-four-issues-2026-09-21 | .worktrees/fix-dev-multiuser-four-issues | projectinstance+docgov | done |
| Cursor | 2026-09-21-taskrun-error-transparency | fix/taskrun-error-transparency-2026-09-21 | - | chat+web | done |
| Cursor | 2026-09-21-trace-panel-null-crash | fix/trace-panel-null-crash-2026-09-21 | - | trace-index+web | done |
| Cursor-Auto | 2026-09-20-stage-backtrack-design | feature/stage-backtrack-design | - | trace-impact-design | done |
@@ -172,7 +173,7 @@
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| - | idle | 2026-09-21 | 任务错误透传已合入 dev 并 rebuild;`GET /api/v1/tasks/runs/{id}` 为 snake_case;`/health` schema_version=59 | - |
| Cursor | idle | 2026-09-21 | dev 已按 fix/dev-multiuser-four-issues-2026-09-21 重建;`/health` schema_version=59 | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -0,0 +1,50 @@
---
title: "dev 多用户四问题修复"
status: done
created: 2026-09-21
updated: 2026-09-21
owner: Cursor
branch: fix/dev-multiuser-four-issues-2026-09-21
worktree: .worktrees/fix-dev-multiuser-four-issues
mutex: projectinstance+docgov
---
# dev 多用户四问题修复
## 目标
项目 6579 上,成员能看到激活后的受控文档,消息能路由到 `bd_*` 任务键,职责矩阵与工作流配置一致,激活后仍可改职责/审批/启用但不能切换工作流。
## 范围
- 激活与列表时把已启用 doc_task 幂等写入 `document_records`(不覆盖已有正文)
- 语义任务键按项目实际键做后缀归一;同浏览器切换账号时清空工作台本地状态
- 职责矩阵改走权威职责与 `PATCH .../duties`,去掉演示工号与演练文案
- `UpdateLivePlan`:激活后可改配置;切换工作流仍拒绝;项目 143 保持冻结
## 非目标
- 不改写、不终止项目 143
- 不把 `my_private` 跨用户 403 改成放行
- 不晋升 test/main
## 步骤
1. [x] 物化模板文档与 6579 回填
2. [x] 任务键归一、账号隔离、403/409 文案
3. [x] 职责矩阵接权威数据
4. [x] 激活后 live 配置编辑
5. [x] 占槽合入 dev、冒烟与实测报告
## 验收标准
- [ ] 陈威浏览器复测仍待做;管理员 `GET /projects/6579/documents` 已看到 7 个 `bd_*` 键
- [x] 「开始编写用户初始需求表」在单测中解析为 `bd_intake`
- [x] 403 文案单测不再落到 NETWORK_ERROR;同浏览器切换清空有单测,未做双账号点击
- [x] 激活后切换工作流被 409 拒绝,项目 143 为 frozen;职责改写有单测
## 相关链接
- Checklist:
- Handoff:
- Test report: `.doc/test-reports/2026-09-21-dev-multiuser-four-issues-test-report.md`
@@ -0,0 +1,60 @@
# dev 多用户四问题修复 测试报告
## 一、 测试背景 (Background)
dev 上项目「新的测试项目」(id 6579)出现四类问题:职责矩阵与工作流配置不一致、激活后整表配置被冻结、成员看不到文档、发送「开始编写用户初始需求表」出现 409 并被界面说成网络错误。项目 143 保持只读。
## 二、 测试目标 (Test Objectives)
- 激活后的启用文档在服务端 `document_records` 中可见。
- 语义任务键能对齐到项目里的 `bd_*` 键。
- 激活后可以改职责、审批和启用,但不能切换工作流;项目 143 仍是冻结。
- 403 不再被当成 `NETWORK_ERROR`。
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:linux;分支 `fix/dev-multiuser-four-issues-2026-09-21`。
- dev 容器于 2026-09-21 用该分支工作树重建。`/health`:`schema_version=59`,`agent_backend=pi-agent`,`kb_ready=true`。
- 单元测试覆盖物化、live 规划、任务键后缀和设置模式。
- 用管理员账号调用 dev `:8080` 核对项目 6579 与 143。未代登陈威(没有使用成员口令)。
## 四、 预期结果 (Expected Results)
- 6579 有 7 条 `bd_*` 模板文档;`bd_intake` 编制人为 398、策略 `author_only`。
- 设置接口 `plan_edit_mode=live`;把工作流键改成别的值返回 409 `WORKFLOW_SWITCH_FROZEN`,版本号不变。
- 项目 143 的 `plan_edit_mode=frozen`。
- 「开始编写用户初始需求表」在只有 `bd_intake` 的交付物池里解析为 `bd_intake`。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 用例 1:6579 文档回填
- 测试输入:向 dev 库为项目 6579 幂等插入 7 条 `doc_proj6579_bd_*`。
- 实际输出:`INSERT 0 7`。随后 `GET /api/v1/projects/6579/documents` 返回 200,任务键包含 `bd_cdo_quote`、`bd_feasibility_dev`、`bd_feasibility_reg`、`bd_intake`、`bd_prelim_design`、`bd_research`、`bd_user_requirements`。另有一条更早的本地键 `intake`(`doc_proj6579_intake`),不是本次插入,也没有改项目 143(该项目文档数仍为 1)。
- 评价判定:PASS。成员列表是否隐藏这条旧 `intake` 行,取决于阶段过滤;7 份 `bd_*` 已在服务端。
- 性能与耗时:插入语句一次返回。
### 用例 2:激活后禁止切换工作流
- 测试输入:`GET /api/v1/projects/6579/settings`,再 `PUT /workflow-plan` 且 `live_edit=true`、`workflow_definition_key=not-the-live-workflow`。
- 实际输出:设置 `plan_edit_mode=live`,`can_edit_plan=false`,`workflow_plan_revision=1`。PUT 返回 409,错误码 `WORKFLOW_SWITCH_FROZEN`,消息「运行中不能切换工作流,只能调整职责、审批和文档启用」。再次读取修订号仍为 1,定义键仍为 `main`。
- 评价判定:PASS。
- 性能与耗时:两次读取与一次拒绝写,均在 1 秒内。
### 用例 3:项目 143 保持冻结
- 测试输入:`GET /api/v1/projects/143/settings`。
- 实际输出:`plan_edit_mode=frozen`。
- 评价判定:PASS。
### 用例 4:任务键与错误文案
- 测试输入:前端单测「开始编写用户初始需求表」对只有 `bd_intake` 的池;`buildNetworkErrorInfo(409, TASK_SCOPE_UNRESOLVED)` 与 403 `ERR_FORBIDDEN`。
- 实际输出:任务键为 `bd_intake`。409 文案为「无法定位该文档任务的工作流阶段,请检查任务名或联系管理员」,不是网络错误。403 文案保留「无权访问」。
- 评价判定:PASS(单测)。浏览器里用陈威再发一句消息未在本轮复测。
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go test -short`:`internal/projectinstance`、`internal/app`、`internal/server` 通过。`internal/docgov` 新增物化测试通过;既有 `TestDocGov_CreateOrGetDocument_OptionalDutiesNullFK` 在连到 dev 库时失败,原因是它用随机 `project_id` 插入文档,而建项目语句的错误被忽略,外键失败。该失败不在本次改动路径上。
- `web`:`npm test` 与 `npm run build` 通过。
- 重建后健康检查:
```json
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":59,"schema_ready":true,"task_store_ready":true}
```
证据:`.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/`。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
服务端文档、live 配置和切换拒绝已在 dev 容器上核对。可以合入 `dev`。尚未用陈威浏览器再走一遍发消息;旧的 `doc_proj6579_intake` 行仍在,不影响 `bd_*` 列表,但可以另开任务决定是否清掉。项目 143 未改写。
@@ -0,0 +1,17 @@
doc_id | task_key | is_template_only | author_id | duty_policy
-----------------------------------+----------------------+------------------+-----------+-------------
doc_proj6579_bd_cdo_quote | bd_cdo_quote | t | 0 |
doc_proj6579_bd_feasibility_dev | bd_feasibility_dev | t | 0 |
doc_proj6579_bd_feasibility_reg | bd_feasibility_reg | t | 0 |
doc_proj6579_bd_intake | bd_intake | t | 398 | author_only
doc_proj6579_bd_prelim_design | bd_prelim_design | t | 0 |
doc_proj6579_bd_research | bd_research | t | 0 |
doc_proj6579_bd_user_requirements | bd_user_requirements | t | 0 |
doc_proj6579_intake | intake | t | 398 | author_only
(8 rows)
project_143_docs
------------------
1
(1 row)
@@ -0,0 +1,6 @@
login 200 user admin 9
documents 200 count 8 task_keys ['bd_cdo_quote', 'bd_feasibility_dev', 'bd_feasibility_reg', 'bd_intake', 'bd_prelim_design', 'bd_research', 'bd_user_requirements', 'intake']
settings 200 plan_edit_mode live revision 1 can_edit_plan False definition main
switch_put 409 error {'error': 'WORKFLOW_SWITCH_FROZEN', 'message': '运行中不能切换工作流,只能调整职责、审批和文档启用'}
revision_after_switch_attempt 1 definition main
project_143_mode 200 frozen