From b9eb9460c07a76617aa73dfe73cc677eaa27246f Mon Sep 17 00:00:00 2001 From: weichen Date: Mon, 21 Sep 2026 05:31:02 +0000 Subject: [PATCH] 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 --- .doc/ops/CURRENT.md | 3 +- .../2026-09-21-dev-multiuser-four-issues.md | 50 ++++++++++++++++ ...1-dev-multiuser-four-issues-test-report.md | 60 +++++++++++++++++++ .../6579-backfill.txt | 17 ++++++ .../api-6579.txt | 6 ++ 5 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 .doc/ops/short-term/2026-09-21-dev-multiuser-four-issues.md create mode 100644 .doc/test-reports/2026-09-21-dev-multiuser-four-issues-test-report.md create mode 100644 .doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/6579-backfill.txt create mode 100644 .doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/api-6579.txt diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 93a3f7f2..60c6f22c 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -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` diff --git a/.doc/ops/short-term/2026-09-21-dev-multiuser-four-issues.md b/.doc/ops/short-term/2026-09-21-dev-multiuser-four-issues.md new file mode 100644 index 00000000..7fd0c1f3 --- /dev/null +++ b/.doc/ops/short-term/2026-09-21-dev-multiuser-four-issues.md @@ -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` diff --git a/.doc/test-reports/2026-09-21-dev-multiuser-four-issues-test-report.md b/.doc/test-reports/2026-09-21-dev-multiuser-four-issues-test-report.md new file mode 100644 index 00000000..bb369d41 --- /dev/null +++ b/.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 未改写。 diff --git a/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/6579-backfill.txt b/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/6579-backfill.txt new file mode 100644 index 00000000..611805f5 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/6579-backfill.txt @@ -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) + diff --git a/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/api-6579.txt b/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/api-6579.txt new file mode 100644 index 00000000..b1935c0e --- /dev/null +++ b/.doc/test-reports/assets/2026-09-21-dev-multiuser-four-issues/api-6579.txt @@ -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