Project

General

Profile

Actions

缺陷 #10

open
RA

专家名片附件上传/删除携带公开平台字段被拒绝及保存失败回滚

缺陷 #10: 专家名片附件上传/删除携带公开平台字段被拒绝及保存失败回滚

Added by Redmine Admin 23 days ago. Updated 23 days ago.

Status:
新建
Priority:
普通
Assignee:
-
Start date:
10/19/2026
Due date:
% Done:

0%

Estimated time:

Description

用户报告专家详情名片/身份证上传失败,出现 public_platforms 请通过公开平台管理入口修改。与普通编辑缺陷 #6 根因相关,但触发入口为附件上传与删除;本任务独立记录该遗漏入口修复。候选 projects/ndb/frontend 分支 feature/configure-expert-public-permissions 未提交工作区;范围:通用创建/更新请求隔离公开平台字段,附件最小请求、失败恢复、连续操作序列化。仅本地自动化与受控 mock 浏览器测试;不访问生产或真实 OSS,不提交不部署。逐条 QA 结果、截图说明及限制追加后续 journal。

RA Updated by Redmine Admin 23 days ago Actions #1

QA 测试结果 - 第 1 轮 - 2026-10-19 Asia/Shanghai

  • 项目:NDB;缺陷 #10;QA:独立 bounded web_qa。
  • 环境:本地 Node 聚焦测试 + http://127.0.0.1:8897 组件 harness(真实 ImageUpload/antdv-next/实际附件回调/API模块;后端、OSS和PM身份完全mock)。这不是完整CRM或真实服务端端到端。
  • 候选:projects/ndb/frontend,feature/configure-expert-public-permissions,HEAD 2165f83615f54709822ef51b48eab1cfb4b56292 及本轮未提交修复。
  • 前置:仅合成数据;无凭据、真实后端/OSS、生产写入或部署。
  • 汇总:Pass 42 / Fail 0 / Blocked 1 / Skipped 0。
  • 证据目录:outputs/candidate-attachments-20261019/;单元test实际运行 node --test 四个聚焦文件及publicExpertProfile.test.mjs。
编号 用例 层级 预期 实际 状态 证据
WEB-ATT-UNIT-001 addCandidate filters platform configuration (disabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-002 editCandidate filters platform configuration (disabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-003 addCandidate filters platform configuration (WECHAT_MINI_APP) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-004 editCandidate filters platform configuration (WECHAT_MINI_APP) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-005 addCandidate filters platform configuration (AI_EXPERT) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-006 editCandidate filters platform configuration (AI_EXPERT) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-007 addCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-008 editCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-009 failed upload is removed from the visible list 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-010 failed removal restores the saved attachment 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-011 thrown save errors restore the visible list 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-012 saved list updates preserve another in-flight upload 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-013 an upload is not duplicated when its save updates props 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-014 another completed upload cannot resurrect a pending removal 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-015 done sends only attachments and commits after success 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-016 done preserves saved state after business failure 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-017 done preserves saved state after network failure 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-018 removed sends only attachments and commits after success 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-019 removed preserves saved state after business failure 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-020 removed preserves saved state after network failure 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-021 concurrent uploads and removal are serialized without losing attachments 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-022 failed save does not poison subsequent operations 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-023 queued callback cannot write to a newly loaded candidate 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-024 an upload event retains its original status if the widget mutates the file 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-025 edit excludes platform fields (0 enabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-026 edit excludes platform fields (1 enabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-027 create excludes platform fields (0 enabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-028 create excludes platform fields (1 enabled) 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-unit.tap
WEB-ATT-UNIT-029 platform toggles preserve the other platform's permission 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-030 AI-only confirmed draft can publish and names the selected platform 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-031 status label distinguishes platform, draft, future publication, and visible publication 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-032 newer candidate load wins when an older response arrives later 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-033 candidate switch invalidates an in-flight write and its final state 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-034 canceling publication after save keeps the confirmed draft without publishing 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-UNIT-035 409 refreshes platform state but preserves the user's draft input 本地源码聚焦测试 断言全部通过 Pass;该独立用例通过 Pass qa-public-profile.tap
WEB-ATT-BROWSER-001 组件上传成功 ego-browser真实组件/本地mock 文件真实input选择后OSS mock成功;仅保存附件 成功提示且保存列表 old/upload;请求仅property.file_list Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-002 组件删除成功 ego-browser真实组件/本地mock 删除后保存成功并从列表消失 upload条目从本地与mock服务端列表移除 Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-003 上传保存失败回滚 ego-browser真实组件/本地mock 业务失败后移除未保存卡片,保留原文件 错误提示;最终DOM 1卡片且原附件保留 Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-004 删除保存失败恢复 ego-browser真实组件/本地mock 删除失败后原卡片恢复 错误提示;最终DOM 1卡片且原附件保留 Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-005 连续附件操作序列化 ego-browser真实组件/本地mock 同时回调互不覆盖且至多1请求在途 old/a/b最终均保留;maxInflight=1;此场景由evaluate触发实际callback Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-006 普通创建更新隔离平台字段 ego-browser真实组件/本地mock 真实API函数过滤公开平台字段 创建请求data只有name;编辑data只有warning;由evaluate触发实际API函数 Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-BROWSER-007 列表只读入口 ego-browser真实组件/本地mock 展示文件但无上传删除控制 真实ImageUpload active=false的dialog展示3文件,无上传删除按钮 Pass browser-requests.json / browser-final-snapshot.txt / qa-browser-observations.md
WEB-ATT-MANUAL-001 真实截图与图文手册 浏览器截图/文档 真实截图及UI/业务复核完成 ego-browser screenshot两次及CDP fromSurface:false一次均Page.captureScreenshot超时;组件文字说明草稿已存,无截图,UI复核未完成 Blocked qa-browser-observations.md / user-guide-draft.md

风险与未验证项

真实后端/OSS联调、生产流程、完整CRM路由与真实角色权限未执行。截图工具3次超时,图文手册仍Blocked,文字草稿不是完整手册;UI视觉与项目业务复核待主任务协调。独立代码复核未发现可操作新增缺陷。后端property合并契约由主任务提供本轮views.py:1111-1139只读核验,非本QA独立后端验收。未提交、推送、部署。

RA Updated by Redmine Admin 23 days ago Actions #2

QA 测试结果 - 第 2 轮 - 2026-10-19 Asia/Shanghai

  • 项目:NDB;缺陷 #10;执行:独立 web_qa。
  • 候选:projects/ndb/frontend,feature/configure-expert-public-permissions,HEAD 2165f83615f54709822ef51b48eab1cfb4b56292 与本轮未提交最终修复;冻结哈希candidate-files-r2.json逐项匹配。
  • 环境:本地Node测试与ego-browser space32真实ImageUpload/antdv-next组件harness;实际附件回调和API源码;身份/后端/OSS仅mock。非完整CRM、真实后端或生产验收。
  • 本轮新增修正:onRemove接入确认与PM/PA拦截;复制组件显示文件,防止组件移除事件污染已保存文件status。
  • 汇总:Pass 212 / Fail 0 / Blocked 0 / Skipped 0。构成为聚焦执行40条、全仓执行164条(包含聚焦重复执行,非204个唯一用例)、浏览器/截图7条、最终手册复核1条。
  • 第1轮截图Blocked历史保留;本轮已恢复真实截图并完成复核,因此解除该视觉交付阻塞。
  • 本地证据:outputs/candidate-attachments-20261019/,聚焦qa-r2-focused.tap、全仓qa-r2-all.tap、浏览器qa-r2-browser-evidence.json。
编号 用例 层级 预期 实际 状态 证据
WEB-ATT-R2-FOCUS-001 addCandidate filters platform configuration (disabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-002 editCandidate filters platform configuration (disabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-003 addCandidate filters platform configuration (WECHAT_MINI_APP) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-004 editCandidate filters platform configuration (WECHAT_MINI_APP) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-005 addCandidate filters platform configuration (AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-006 editCandidate filters platform configuration (AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-007 addCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-008 editCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-009 upload removal is wired to the current component's onRemove guard 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-010 non-PM/PA users cannot remove an attachment 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-011 isPM deletion waits for explicit confirmation and supports cancel 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-012 isPA deletion waits for explicit confirmation and supports cancel 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-013 widget removal mutations cannot change saved file status before or after failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-014 failed upload is removed from the visible list 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-015 failed removal restores the saved attachment 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-016 thrown save errors restore the visible list 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-017 saved list updates preserve another in-flight upload 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-018 an upload is not duplicated when its save updates props 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-019 another completed upload cannot resurrect a pending removal 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-020 done sends only attachments and commits after success 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-021 done preserves saved state after business failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-022 done preserves saved state after network failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-023 removed sends only attachments and commits after success 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-024 removed preserves saved state after business failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-025 removed preserves saved state after network failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-026 concurrent uploads and removal are serialized without losing attachments 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-027 failed save does not poison subsequent operations 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-028 queued callback cannot write to a newly loaded candidate 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-029 an upload event retains its original status if the widget mutates the file 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-030 edit excludes platform fields (0 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-031 edit excludes platform fields (1 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-032 create excludes platform fields (0 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-033 create excludes platform fields (1 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-034 platform toggles preserve the other platform's permission 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-035 AI-only confirmed draft can publish and names the selected platform 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-036 status label distinguishes platform, draft, future publication, and visible publication 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-037 newer candidate load wins when an older response arrives later 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-038 candidate switch invalidates an in-flight write and its final state 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-039 canceling publication after save keeps the confirmed draft without publishing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-FOCUS-040 409 refreshes platform state but preserves the user's draft input 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-focused.tap
WEB-ATT-R2-ALL-001 addCandidate filters platform configuration (disabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-002 editCandidate filters platform configuration (disabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-003 addCandidate filters platform configuration (WECHAT_MINI_APP) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-004 editCandidate filters platform configuration (WECHAT_MINI_APP) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-005 addCandidate filters platform configuration (AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-006 editCandidate filters platform configuration (AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-007 addCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-008 editCandidate filters platform configuration (WECHAT_MINI_APP,AI_EXPERT) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-009 upload removal is wired to the current component's onRemove guard 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-010 non-PM/PA users cannot remove an attachment 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-011 isPM deletion waits for explicit confirmation and supports cancel 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-012 isPA deletion waits for explicit confirmation and supports cancel 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-013 widget removal mutations cannot change saved file status before or after failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-014 failed upload is removed from the visible list 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-015 failed removal restores the saved attachment 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-016 thrown save errors restore the visible list 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-017 saved list updates preserve another in-flight upload 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-018 an upload is not duplicated when its save updates props 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-019 another completed upload cannot resurrect a pending removal 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-020 removes script and style elements together with their content 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-021 removes other dangerous containers case-insensitively 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-022 drops the remainder after an unclosed dangerous element 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-023 preserves normal paragraphs, lists, and inline formatting 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-024 only renders project-task expert details for a valid expert id 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-025 defaults receivers to the client and expert emails and ccs to current user, PA and PM 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-026 removes empty and duplicate emails and does not repeat receivers in ccs 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-027 ignores missing account assignments and emails 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-028 formats a task email record for the history modal 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-029 formats cancellation and missing snapshot values safely 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-030 expert templates send plain email without calendar fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-031 calendar and unknown templates preserve calendar behavior 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-032 detects ISO timestamps with explicit timezone 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-033 keeps legacy naive timestamps on the existing parsing path 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-034 builds a fuzzy name search for non-numeric input 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-035 builds an exact candidate id search for numeric input 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-036 normalizes completed rate change image uploads for the API 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-037 allows at most three rate change attachments 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-038 parses line and comma separated IP ranges without duplicates 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-039 serializes IP ranges for editing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-040 builds a normalized API payload 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-041 direct AI search sends the full sentence without keyword search 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-042 ordinary search parameters stay unchanged without an AI query 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-043 done sends only attachments and commits after success 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-044 done preserves saved state after business failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-045 done preserves saved state after network failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-046 removed sends only attachments and commits after success 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-047 removed preserves saved state after business failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-048 removed preserves saved state after network failure 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-049 concurrent uploads and removal are serialized without losing attachments 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-050 failed save does not poison subsequent operations 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-051 queued callback cannot write to a newly loaded candidate 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-052 an upload event retains its original status if the widget mutates the file 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-053 selects the first browser-supported recording MIME type 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-054 formats recording duration as minutes and seconds 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-055 appends recognized text without replacing existing background 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-056 calculates and formats live microphone volume as dBFS 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-057 edit excludes platform fields (0 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-058 edit excludes platform fields (1 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-059 create excludes platform fields (0 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-060 create excludes platform fields (1 enabled) 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-061 corporate bank rules and switching reset sensitive personal fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-062 corporate account save strips personal fields while preserving bank fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-063 task payment corporate selection, bank rules, snapshot and personal switch 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-064 three cooperation fields default pending and remain independent 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-065 resume import leaves unknown English company blank and manual input survives submit normalization 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-066 reads duplicate candidates from a paginated response on the new page 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-067 excludes the current candidate while retaining other duplicates 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-068 continues to support an unpaginated candidate array 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-069 platform toggles preserve the other platform's permission 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-070 AI-only confirmed draft can publish and names the selected platform 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-071 status label distinguishes platform, draft, future publication, and visible publication 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-072 newer candidate load wins when an older response arrives later 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-073 candidate switch invalidates an in-flight write and its final state 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-074 canceling publication after save keeps the confirmed draft without publishing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-075 409 refreshes platform state but preserves the user's draft input 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-076 defaults existing zero before suggestion; review re-fetches and does not save 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-077 quarter default combines current advance and catch-up but preserves existing actual 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-078 confirmation submits reviewed payload; duplicate click does not duplicate writes 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-079 business failure keeps modal, clears review and requires explicit recheck 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-080 newly pending receipt blocks previous-year save during fresh review 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-081 nonfinance cannot open or review; pending rows leave previous actual blank 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-082 annual fields mirror Excel: four advance/catch-up/actual groups and previous difference pair 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-083 empty actual is distinct from registered zero 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-084 invalid money, empty form, future quarter and early year-end cannot be registered 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-085 quarter accepts explicit zero and preserves exact decimal strings 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-086 adjustments require prior year, customer, nonzero amount and reason 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-087 Shanghai quarter boundary and next-April annual settlement gate 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-088 already confirmed periods and incomplete annual data are blocked 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-089 quarter suggestion defaults exact amount, remains editable, and performs no write 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-090 quarter changes replace defaults and stale/closed requests cannot overwrite 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-091 no receipts default to zero; failed suggestions remain blank and allow manual entry 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-092 review is read-only; explicit confirmation submits frozen employee/period payload 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-093 business failure does not close modal or automatically retry 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-094 duplicate clicks in flight cannot send duplicate writes 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-095 nonfinance caller and settled annual period cannot write quarter updates 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-096 confirmed quarter opens existing actual amount and allows reviewed overwrite 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-097 prior-year adjustment verifies locked original year and chosen customer 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-098 annual review checks four quarters and writes only employee/year after confirmation 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-099 finance write clients reject business failures and suppress duplicate notifications 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-100 skipped annual amounts are informational and do not block year-end registration 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-101 annual skip summary sums cents exactly and includes every reason 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-102 annual only; compact existing icon action and fourteen amount fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-103 changing year automatically fetches and ignores stale results 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-104 HTTP 200 business error clears stale rows and disables financial actions 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-105 invalid year stops request and discards former result 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-106 annual modal warning spacing, latest recheck and no direct payment 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-107 shows priority payment in the expert payment table 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-108 includes priority payment in the finance filter form and request state 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-109 validates meeting background image type and size 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-110 upload success stores the returned URL without base64 persistence 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-111 failed replacement keeps the previous image and supports retry 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-112 removing an uploaded image clears the submitted URL 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-113 normalizeMeetingPage supports meeting and legacy pagination envelopes 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-114 meeting API records normalize lifecycle aliases before rendering 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-115 meeting background field maps to ready, empty, invalid and failed display states 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-116 clipboard copies raw links and normalized hours with success, failure and empty handling 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-117 unknown statuses never expose raw backend enums 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-118 buildMeetingPayload sends fixed planned hours and trims text 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-119 buildMeetingUpdatePayload only sends fields allowed by backend 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-120 create and update payloads never submit application or meeting project ownership 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-121 repeat save reuses its idempotency key until form data changes 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-122 calendar value persists and backend-created project is displayed 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-123 meeting actions follow lifecycle and do not recreate settlement 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-124 taskGenerationSummary exposes missing linked tasks 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-125 meeting forms do not expose application or meeting project ownership fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-126 meeting background is upload-only and cannot be entered as a URL 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-127 read-only edit mode cannot be re-enabled by child form controls 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-128 meeting list owns a single retryable Chinese error state 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-129 registration selection gates downstream resources and submission 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-130 meeting list and detail render the shared background display without exposing its URL 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-131 detail copy actions are gated and use raw link plus normalized hours 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-132 meeting pages follow shared responsive page patterns 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-133 meeting edit and detail expose retryable load failures 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-134 meeting detail error state hides entity actions and loading status 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-135 meeting business fields are editable and visible without exposing soft-delete state 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-136 meeting metadata shares one row, tags follow schedule, and join link owns a textarea row 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-137 returns the company and title from the most recent expert experience 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-138 uses the larger id when experience start dates are missing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-139 returns null when the expert has no experience 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-140 uses the expert real name as the alias for real background reuse 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-141 returns all reusable fields from the latest expert task 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-142 allows the assigned PA to update basic information without closing or reassigning the task 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-143 grants full permissions when a PM-role account is assigned as the task PA 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-144 keeps an unrelated PA from editing the task 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-145 keeps an unrelated PM-role account from editing the task 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-146 uses task PM permissions when a PA-role account is assigned as the task PM 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-147 uses task PM permissions when the same account is assigned as both PM and PA 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-148 preserves full task permissions for administrators 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-149 normalizes saved telephone meeting information for editing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-150 normalizes third-party meeting information for editing 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-151 builds telephone meeting fields for task updates 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-152 builds third-party meeting fields for task updates 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-153 opens feedback only after task and requirement progress are saved 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-154 does not open feedback when task submission fails 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-155 builds an existing project and requirement payload without new resource fields 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-156 builds a new project and requirement payload without stale ids 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-157 builds a payload with a null client when no customer contact is selected 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-158 marks every quick-editable table cell with a visible edit affordance 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-159 creates modal values from the selected task-list field 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-160 builds a narrow task update payload for each modal 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-161 topic detail error state uses an explicit title and hides entity actions 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-162 normalizeTopicPage accepts the web pagination envelope 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-163 topicOutlineSummary creates readable text from legacy HTML and Markdown 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-ALL-164 topicPayload trims and deduplicates tags and relations 独立本地源码测试 全部断言符合用例定义 该次执行Pass Pass qa-r2-all.tap
WEB-ATT-R2-BROWSER-001 上传并保存 ego真实组件本地mock 1→2文件,保存请求不含平台字段 新增upload.png,request count4→5,列表2 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-002 删除确认取消 ego真实组件本地mock Cancel不保存并保留2文件 确认框真实出现,Cancel后request仍5,保存状态done/done Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-003 删除确认成功 ego真实组件本地mock OK后2→1文件 request5→6,剩余原附件 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-004 上传保存失败恢复 ego真实组件本地mock 移除未保存卡片,保留原附件 request6→7;原附件1且DOM1 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-005 删除保存失败恢复 ego真实组件本地mock 确认删除失败恢复正常文件状态 request7→8;保存对象status=done,DOM1 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-006 列表只读入口 ego真实组件本地mock 列表预览无上传或删除控制 真实active=false弹窗仅原附件与预览,无上传/删除控制 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-BROWSER-007 最终7张截图与文字步骤 ego真实组件本地mock 截图为本轮真实组件、无敏感数据、文字与复现一致 QA已逐图查看7图,按手册复现全部关键步骤;本地mock标识清晰 Pass qa-r2-browser-evidence.json;docs/user-manual/expert-attachments.md及7图
WEB-ATT-R2-MANUAL-001 图文手册双重复核与最终引用检查 文档/视觉/业务复核 7图匹配步骤,UI与项目业务复核通过,全部图片存在 UI最终7图结构与可读性PASS;主任务业务准确性PASS;Cancel/OK中文对应已明确;7图片引用和冻结源码校验通过 Pass docs/user-manual/expert-attachments.md;assets/expert-attachments/7图

图文手册与复核

手册:projects/ndb/frontend/docs/user-manual/expert-attachments.md。7图:docs/user-manual/assets/expert-attachments/01-attachment-dialog.png、02-upload-saved.png、03-delete-confirmation.png、04-delete-saved.png、05-upload-failure-restored.png、06-delete-failure-restored.png、07-readonly-preview.png。

QA已按手册实测:上传1→2;Cancel保留2且不发请求;OK后2→1;上传失败临时卡移除;删除失败恢复且status仍done;只读入口无上传/删除。UI与项目主任务业务校对均通过。

风险与证据边界

未执行真实CRM路由、实际账号/PA权限、真实后端/OSS联调及生产流程;PA和非PM/PA拦截有源码测试,浏览器角色为合成PM。截图均真实当前组件本地mock,描述有本地模拟未上线标识。未提交、推送或部署。第1轮记录不覆盖。

RA Updated by Redmine Admin 23 days ago Actions #3

QA 测试结果 - 第 3 轮 - 2026-10-19 测试环境真实CRM

  • 环境:https://tcrm.mindsetech.com;实际API origin=https://tcrm-api.mindsetech.com。
  • Web:2.16.3-beta.0 / 89393b3;运行入口index-C30EZD7i.js;实时读取login-Djc4Lsj7.js确认目标版本。
  • 账号:既有管理员会话;不是PM/PA,未变更角色。
  • 数据:本任务唯一合成专家574234“QA附件验收20261019”、QA合成图片;未访问截图原专家或生产数据。
  • 汇总:Pass12 / Fail0 / Blocked4 / Skipped0。
  • 重要证据边界更正:第1/2轮212Pass与本地mock图均保留为真实开发隔离证据,不计正式测试环境验收或正式手册完成。当前按新规范需真实测试流程通过后才编正式手册。
  • 证据目录:outputs/candidate-attachments-20261019/staging/。每条均为本轮实际执行/阻塞,绝不沿用mock补通过。
编号 用例 层级 预期 实际 状态 证据
LIVE-001 测试环境与实际Web版本 测试环境真实CRM 实际tcrm/test API与目标版本一致 tcrm.mindsetech.com;请求origin tcrm-api.mindsetech.com;live login-Djc4Lsj7.js包含2.16.3-beta.0;运维候选89393b3 Pass live-environment.json
LIVE-002 完整CRM登录可用 测试环境真实CRM 已有测试会话可进入真实专家工作流 既有管理员会话有效;未填写或输出凭据 Pass 真实页面及后续业务证据
LIVE-003 独立合成QA专家创建 测试环境真实CRM 仅建立本任务合成记录,普通请求不含平台字段 QA附件验收20261019 #574234创建HTTP200/code200;example.invalid邮箱,保留虚构号,无真实专家操作 Pass 01-create-upload-requests.json
LIVE-004 空附件入口 测试环境真实CRM 真实详情弹窗初始0文件 完整CRM显示0文件和上传入口 Pass 01-attachment-dialog.png
LIVE-005 真实OSS上传及关联保存 测试环境真实CRM 文件传输后专家附件保存成功 真实OSS staging/upload/candidate前缀;候选PUT HTTP200/code200;显示1文件并成功提示 Pass 02-upload-saved.png;01-create-upload-requests.json
LIVE-006 附件最小请求及平台隔离 测试环境真实CRM 仅提交property.file_list,无公开平台字段 实际PUT顶层仅property,property内仅file_list,平台字段不存在 Pass 01-create-upload-requests.json
LIVE-007 刷新后的真实持久化 测试环境真实CRM 重新加载后原附件仍存在 真实GET后弹窗1个文件 Pass 03-refresh-persisted.png
LIVE-008 非PM/PA删除权限拦截 测试环境真实CRM 不发保存、不打开确认、保留附件 管理员点击删除提示权限不足,仍1文件,无删除PUT Pass 07-delete-permission-denied.png
LIVE-009 真实页面上传保存网络失败恢复 测试环境真实CRM 保存失败后移除未保存新卡、保留已存附件 本任务tab精确阻断候选URL;实际上传后PUT status0;显示附件保存失败请重试,DOM回到1;已解除阻断 Pass 05-upload-failure-restored.png;02-postrefresh-requests.json
LIVE-010 失败后刷新仍保留原附件 测试环境真实CRM 恢复正常网络并刷新,服务端原附件不丢 阻断已清空,真实GET成功,仍1文件 Pass 06-failure-refresh-persisted.png
LIVE-011 合成fixture按现有UI更正归类及普通编辑回归 测试环境真实CRM 仅必要合成数据变更,自然归类且保留附件、无平台字段 仅574234在真实编辑UI改852/00000000,source自然abroad→candidates、省份香港;PUT200/code200,原附件1且不含平台字段 Pass 03-fixture-reclassification.json
LIVE-012 完整专家列表只读附件入口 测试环境真实CRM 姓名搜索后只读弹窗有文件、无上传删除 精确QA姓名搜索找到唯一合成记录;打开1文件,uploadTriggers=0,deleteButtons=0 Pass 08-readonly-list-preview.png
LIVE-013 PM/PA删除取消 测试环境真实CRM 有权角色Cancel不保存且保留文件 无现成PM/PA测试账号;当前管理员不是PM/PA;新增权限等待用户授权 Blocked 非PM/PA实际权限拦截已验证
LIVE-014 PM/PA确认删除与刷新持久化 测试环境真实CRM 真实有权角色确认后删除并刷新消失 缺PM/PA账号,不伪造角色或绕过UI拦截 Blocked 待主任务协调
LIVE-015 有权删除网络失败恢复 测试环境真实CRM 确认删除失败后原附件恢复正常状态 依赖PM/PA真实账号,未执行,不能沿用mock结果 Blocked 待主任务协调
LIVE-016 正式测试环境图文手册 测试环境真实CRM 全部关键真实流程通过后同环境采图并双重复核 测试环境删除流程未通过,正式手册尚未编写;业务仓库写入暂缓。既有本地手册仅开发草稿 Blocked docs/qa-user-manual-standard.md最新门禁

阻塞和残余状态

PM/PA专用测试账号及新lookup专用应用最小权限仍等待用户授权,QA未创建账号/应用、改角色、重置密钥或扩scope。测试应用管理只见“小程序BFF”,无expert:lookup;后端新候选未确认运行,未对旧服务作新lookup验收。此API事项由主任务单独协调,不计Web已通过。

现有QA专家保留1个已关联合成附件。网络失败场景另遗留1个未关联staging合成OSS对象,未直接删除存储对象。所有浏览器URL阻断已解除,刷新真实GET成功。只读列表经姓名搜索ES路径验收;ID查询缺file_list与跨source显示差异只观察、不扩大修复。

本轮仅改已授权测试数据、写outputs与Redmine;未修改业务仓源码/手册、分支、提交、部署或生产。专用Ego空间33保留以便后续继续。

RA Updated by Redmine Admin 23 days ago Actions #4

QA 测试结果 - 第4轮 - 专用PM测试环境补验

  • 环境https://tcrm.mindsetech.com;页面实际加载2.16.3-beta.0/index-C30EZD7i.js。
  • 专用测试账号12,仅PM单角色;合成专家574234;非完整最终beta.1验收。
  • 汇总Pass6 / Fail0 / Blocked2 / Skipped0。
  • 证据目录outputs/candidate-attachments-20261019/staging/:pm-beta0-evidence.json、09-pm-delete-confirmation-beta0.png、10-pm-delete-saved-beta0.png、11-pm-delete-failure-restored-beta0.png、12-pm-postfailure-refresh.png。
编号 用例 层级 预期 实际 状态
PM-001 专用PM真实密码登录 真实测试环境CRM 仅本任务新PM12成功进入CRM 真实登录成功,角色项目经理,访问上限20 Pass
PM-002 PM确认框与取消 真实测试环境CRM 删除弹出中文确认,取消不发请求 确认文件名正确;取消requests=0,保留1文件 Pass
PM-003 PM确认删除 真实测试环境CRM 确认后最小请求保存,文件消失 PUT仅property/file_list=[],HTTP200/code200,无平台字段,显示0文件 Pass
PM-004 准备失败恢复附件 真实测试环境CRM 重传唯一合成图恢复1文件 真实OSS与PUT200/code200,显示1文件 Pass
PM-005 PM删除网络失败恢复 真实测试环境CRM 确认删除传输失败后保留原文件且状态正常 本任务候选URL精确阻断;PUT status0;原卡恢复且class为done;随后解除阻断 Pass
PM-006 失败后真实刷新持久化 真实测试环境CRM 恢复网络刷新仍1个正常文件 真实重载后1文件,卡片class仍done Pass
PM-007 新规则管理员删除 真实测试环境CRM 确认的管理员/超管规则在新beta真实通过 用户现已明确su/admin/PM/PA均可删除;beta.1运行版本尚待Operations确认,未计通过 Blocked
PM-008 正式手册 真实测试环境CRM 新beta真实管理员路径通过后同环境编写复核 仍等待新beta门禁及主任务仓库写入窗口,未编正式手册 Blocked

历史规则更正与剩余门禁

用户已明确超级管理员、管理员、PM、PA都应可删除。本次第3轮“管理员权限不足”只证明旧beta.0当时的代码行为,不满足现在确认的产品规则;历史记录保留、不覆盖。Web新beta.1需真实管理员复测,不能用本轮PM或本地角色矩阵替代。超管浏览器若无真实会话则须明确未运行。

本轮使用真实完整CRM/真实测试后端和OSS,失败用例仅浏览器阻断专用候选PUT,无伪造服务端响应;阻断已清空。仅本任务合成图/专家,无真实数据或生产操作。账号密码只BW/内存;专用账号仍保留待最终新beta验收后停用。

RA Updated by Redmine Admin 23 days ago Actions #5

QA 测试结果 - 第5轮 - beta.1 真实管理员与正式手册收尾

环境 https://tcrm.mindsetech.com,Web 2.16.3-beta.1 / 56c03f4,Backend 1.20.4b0。仅本任务合成专家574234;真实管理员user2,未改角色。
汇总 Pass22 / Fail0 / Blocked0。历史各轮及其Blocked保留,本轮为新候选验收,不覆盖。

编号 用例 层级 预期 实际 状态
W5-001 版本和实际 API 门禁 真实测试环境/交付复核 符合当前已确认规则及隔离边界 真实测试 CRM 加载 beta.1/56c03f4,入口 index-QAt-yjBy.js;API tcrm-api.mindsetech.com,Backend 1.20.4b0 Pass
W5-002 管理员实际身份 真实测试环境/交付复核 符合当前已确认规则及隔离边界 原有 user2,真实 Store roles=[admin]、isAdmin=true、isPM/isPA=false,无角色修改 Pass
W5-003 详情附件入口 真实测试环境/交付复核 符合当前已确认规则及隔离边界 从合成专家 574234 详情身份图标打开,初始 1 文件;完整 CRM 真实附件弹窗 Pass
W5-004 真实上传保存 真实测试环境/交付复核 符合当前已确认规则及隔离边界 合成 PNG 经真实测试 OSS 上传,PUT HTTP200/code200;文件 1→2,成功反馈 Pass
W5-005 最小字段隔离 真实测试环境/交付复核 符合当前已确认规则及隔离边界 所有本轮附件保存仅 property.file_list;无 public_platforms 或其他平台字段 Pass
W5-006 删除确认 真实测试环境/交付复核 符合当前已确认规则及隔离边界 管理员点击删除弹出中文确认框,文件名正确 Pass
W5-007 取消删除 真实测试环境/交付复核 符合当前已确认规则及隔离边界 取消后仍 2 文件,无额外保存请求 Pass
W5-008 确认删除 真实测试环境/交付复核 符合当前已确认规则及隔离边界 确定后 PUT200/code200,文件 2→1,无权限不足 Pass
W5-009 成功后刷新持久化 真实测试环境/交付复核 符合当前已确认规则及隔离边界 真实页面重载后仍 1 文件,正常 done 状态 Pass
W5-010 上传保存网络失败 真实测试环境/交付复核 符合当前已确认规则及隔离边界 仅精确阻断该 fixture PUT,status0;新增卡片移除,原 1 文件保留 Pass
W5-011 删除保存网络失败 真实测试环境/交付复核 符合当前已确认规则及隔离边界 精确阻断该 fixture PUT,status0;原卡片恢复,仍 1 文件且 done Pass
W5-012 故障解除和刷新 真实测试环境/交付复核 符合当前已确认规则及隔离边界 立即解除网络阻断,真实刷新仍 1 文件/done,无成功失败操作污染持久状态 Pass
W5-013 列表只读入口 真实测试环境/交付复核 符合当前已确认规则及隔离边界 按姓名搜索合成专家,附件弹窗显示 1 文件,无上传入口/删除按钮 Pass
W5-014 按手册重走成功路径 真实测试环境/交付复核 符合当前已确认规则及隔离边界 第二轮真实上传 1→2、取消无保存、确认删除 2→1;独立记录 phase1 Pass
W5-015 按手册重走失败路径 真实测试环境/交付复核 符合当前已确认规则及隔离边界 第二轮上传/删除 PUT 精确阻断分别 status0、均恢复 1 文件/done;block 已解除,phase2 留证 Pass
W5-016 失败截图补采 真实测试环境/交付复核 符合当前已确认规则及隔离边界 经主任务许可仅额外一次精确阻断失败删除;原1文件/done,立即解除;旧多 toast 图保留历史,正式使用清晰单错误图 Pass
W5-017 正式图文手册资源 真实测试环境/交付复核 符合当前已确认规则及隔离边界 同一实际 beta.1 完整测试 CRM 9 张截图,图片引用存在,10 项资源 SHA256 已记录,非本地 harness Pass
W5-018 UI 最终复核 真实测试环境/交付复核 符合当前已确认规则及隔离边界 责任 UI 线程已逐张 9 图确认清晰/完整/图文一致并核验资源;无关键裁切,最终 PASS Pass
W5-019 主 Agent 业务校对 真实测试环境/交付复核 符合当前已确认规则及隔离边界 实际版本、角色、最小请求、保存/恢复、入口及截图均校对 PASS;列表步骤收窄为已测姓名搜索 Pass
W5-020 专用 PM 账号停用 真实测试环境/交付复核 符合当前已确认规则及隔离边界 仅 user12 通过真实 UI 改 inactive;PUT200/code200;详情读回 inactive、PM单角色和上限20,原管理员会话保留 Pass
W5-021 专用 lookup 应用停用证据 真实测试环境/交付复核 符合当前已确认规则及隔离边界 仅 app2 disabled,原 scope/IP/有效期保持,真实管理 UI 读回;证据已独立写入 #9 journal116,无改 BFF app1 Pass
W5-022 最终隔离状态 真实测试环境/交付复核 符合当前已确认规则及隔离边界 仅合成专家574234,保留1个合成附件;无生产数据操作,无真实专家修改,无 OSS 删除,无额外权限扩展 Pass

证据

任务 outputs/candidate-attachments-20261019/staging/:qa-live-round5-results.json、beta1-role-evidence.json、beta1-admin-request-evidence.json、manual-rehearsal-phase1.json、manual-rehearsal-phase2.json、final-failure-reshoot-evidence.json、test-account-inactive.json、test-application-disabled.json、formal-manual-hashes.json。
正式手册 projects/ndb/frontend/docs/user-manual/expert-attachments.md;同目录 assets/expert-attachments/ 下01至09共9张真实测试环境截图。最终手册SHA256 f8f55295c64ffde48a8d83072a58652a993db5d916a61b2d7c164ca2cec368ad。

实际未测与边界

  • 没有真实超级管理员/PA逐角色浏览器会话;两者仅真实角色Store矩阵源码证据,PM浏览器为上一beta候选。
  • 没有生产环境验证;本报告不等同生产上线。
  • 没有真实409重复匹配等需新增多fixture的lookup验收,详见#9真实验收边界。

网络故障只在QA浏览器精确阻断本任务候选PUT,不伪造服务端成功响应;所有阻断已解除。合成图可能留有测试OSS对象,按主任务要求不清删;fixture保持1附件。未提交、推送或部署;生产由主任务及Operations后续门禁执行。

Actions

Also available in: PDF Atom