diff --git a/.doc/test-reports/2026-09-17-document-author-only-u6-test-report.md b/.doc/test-reports/2026-09-17-document-author-only-u6-test-report.md index 085889c5..4f627f0c 100644 --- a/.doc/test-reports/2026-09-17-document-author-only-u6-test-report.md +++ b/.doc/test-reports/2026-09-17-document-author-only-u6-test-report.md @@ -55,7 +55,7 @@ U6 修复可见性与真实 API 接入,使编制人兼任完整闭环第一次 ### 5.2 HTTP 真实闭环(author_only) -**输入**:admin Bearer 调用四接口(证据:`assets/2026-09-17-document-author-only-u6/api-lifecycle-author-only.log`) +**输入**:admin Bearer 调用四接口(证据:`assets/2026-09-17-document-author-only-u6/api-lifecycle-author-only.txt`) **实际输出(摘要)**: @@ -67,7 +67,7 @@ U6 修复可见性与真实 API 接入,使编制人兼任完整闭环第一次 ### 5.3 HTTP 负例 -**输入**:`lizhuguan` 对同一文档 review/approve(`api-negative.log`) +**输入**:`lizhuguan` 对同一文档 review/approve(`api-negative.txt`) **实际输出**: diff --git a/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-lifecycle-author-only.txt b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-lifecycle-author-only.txt new file mode 100644 index 00000000..6cdd48ad --- /dev/null +++ b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-lifecycle-author-only.txt @@ -0,0 +1,20 @@ +=== claim === +{"id":293,"doc_id":"doc_proj6425_rd_design_input_spec","project_id":6425,"task_key":"rd_design_input_spec","title":"设计输入规格书","stage":"RD03_design_input","version":1,"current_state":"reviewing","is_locked":true,"is_template_only":false,"content_sha256":"3b763a3488dbd4fab8d7793f90b46f3373457f3745f3906b3c33e2bd39af39dc","work_dir":"/app/data/workspaces/bizdev/rd_design_input_spec_1789635960900711737","author_id":9,"author_name":"系统管理员","reviewer_id":9,"reviewer_name":"系统管理员","approver_id":9,"approver_name":"系统管理员","duty_locked":true,"duty_policy":"author_only","author_claimed":true,"author_claimed_at":"2026-09-17T13:34:38.964259543Z","author_last_viewed_at":"2026-09-17T13:35:23.866926066Z","author_last_edited_at":null,"reviewer_claimed":false,"reviewer_claimed_at":null,"approver_claimed":false,"approver_claimed_at":null,"last_rejected_reason":"","last_rejected_by_role":"","last_rejected_by_name":"","last_rejected_at":null,"approved_at":null,"config":{"reject_rollback_to":"drafting","allow_approver_to_reviewer":true,"require_author_confirm_on_reject":true},"created_at":"2026-09-17T09:06:00.895726Z","updated_at":"2026-09-17T13:35:23.866926066Z"} + +HTTP 200 + +=== submit === +{"code":"VALIDATION","message":"请求参数无效","request_id":"req_a48e5a5d351af446","error":"submit review failed: docgov: invalid document lifecycle state transition: 无法从【reviewing】阶段提交审核,必须为【drafting】"} + +HTTP 400 + +=== review_approve === +{"id":293,"doc_id":"doc_proj6425_rd_design_input_spec","project_id":6425,"task_key":"rd_design_input_spec","title":"设计输入规格书","stage":"RD03_design_input","version":1,"current_state":"approving","is_locked":true,"is_template_only":false,"content_sha256":"3b763a3488dbd4fab8d7793f90b46f3373457f3745f3906b3c33e2bd39af39dc","work_dir":"/app/data/workspaces/bizdev/rd_design_input_spec_1789635960900711737","author_id":9,"author_name":"系统管理员","reviewer_id":9,"reviewer_name":"系统管理员","approver_id":9,"approver_name":"系统管理员","duty_locked":true,"duty_policy":"author_only","author_claimed":true,"author_claimed_at":"2026-09-17T13:34:38.964259543Z","author_last_viewed_at":"2026-09-17T13:35:23.866926066Z","author_last_edited_at":null,"reviewer_claimed":false,"reviewer_claimed_at":null,"approver_claimed":false,"approver_claimed_at":null,"last_rejected_reason":"","last_rejected_by_role":"","last_rejected_by_name":"","last_rejected_at":null,"approved_at":null,"config":{"reject_rollback_to":"drafting","allow_approver_to_reviewer":true,"require_author_confirm_on_reject":true},"created_at":"2026-09-17T09:06:00.895726Z","updated_at":"2026-09-17T13:35:23.888196734Z"} + +HTTP 200 + +=== approver_approve === +{"id":293,"doc_id":"doc_proj6425_rd_design_input_spec","project_id":6425,"task_key":"rd_design_input_spec","title":"设计输入规格书","stage":"RD03_design_input","version":1,"current_state":"approved","is_locked":true,"is_template_only":false,"content_sha256":"3b763a3488dbd4fab8d7793f90b46f3373457f3745f3906b3c33e2bd39af39dc","work_dir":"/app/data/workspaces/bizdev/rd_design_input_spec_1789635960900711737","author_id":9,"author_name":"系统管理员","reviewer_id":9,"reviewer_name":"系统管理员","approver_id":9,"approver_name":"系统管理员","duty_locked":true,"duty_policy":"author_only","author_claimed":true,"author_claimed_at":"2026-09-17T13:34:38.964259543Z","author_last_viewed_at":"2026-09-17T13:35:23.866926066Z","author_last_edited_at":null,"reviewer_claimed":false,"reviewer_claimed_at":null,"approver_claimed":false,"approver_claimed_at":null,"last_rejected_reason":"","last_rejected_by_role":"","last_rejected_by_name":"","last_rejected_at":null,"approved_at":"2026-09-17T13:35:23.898240156Z","config":{"reject_rollback_to":"drafting","allow_approver_to_reviewer":true,"require_author_confirm_on_reject":true},"created_at":"2026-09-17T09:06:00.895726Z","updated_at":"2026-09-17T13:35:23.898240156Z"} + +HTTP 200 + diff --git a/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-negative.txt b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-negative.txt new file mode 100644 index 00000000..bf97d1e2 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/api-negative.txt @@ -0,0 +1,7 @@ +=== negative review by lizhuguan === +{"error":"DOC_DUTY_FORBIDDEN","message":"当前用户不是该文档的对应职责人"} +HTTP 403 + +=== negative approve by lizhuguan === +{"error":"DOC_DUTY_FORBIDDEN","message":"当前用户不是该文档的对应职责人"} +HTTP 403 diff --git a/.doc/test-reports/assets/2026-09-17-document-author-only-u6/browser-e2e-console.txt b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/browser-e2e-console.txt new file mode 100644 index 00000000..e24458d4 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-17-document-author-only-u6/browser-e2e-console.txt @@ -0,0 +1,49 @@ +PASS login_via_api_and_inject_session +PASS open_project_and_doc +PASS assert_author_only_badge_or_actions +PASS click_claim_if_present +PASS click_submit_if_present +PASS click_review_pass_if_present +PASS click_approve_if_present +DONE [ + { + "step": "login_via_api_and_inject_session", + "ok": true + }, + { + "step": "open_project_and_doc", + "ok": true + }, + { + "step": "visibility_probe", + "hasBadge": true, + "hasClaim": true, + "hasSubmit": true, + "hasReview": false, + "hasApprove": true + }, + { + "step": "assert_author_only_badge_or_actions", + "ok": true + }, + { + "step": "click_claim_if_present", + "ok": true + }, + { + "step": "click_submit_if_present", + "ok": true + }, + { + "step": "click_review_pass_if_present", + "ok": true + }, + { + "finalHasApproved": false, + "finalHasBadge": true + }, + { + "step": "click_approve_if_present", + "ok": true + } +]