Project

General

Profile

QA验收 #35 » qa-report.md

Redmine Admin, 11/02/2026 07:17 AM

 

QA106-MARGINCONFIRM 本机真实页面验收 — 父#35

执行日期:2026-11-02 Asia/Shanghai,原可见QA责任聊天。仅本轮确认交互,不重做原#35/#38全包,不代表部署。

本轮11 Pass / 0 Fail / 1 Blocked / 0 Skipped:10项真实交互观察通过、1项恢复清理通过;其他角色/只读关系场景仍Blocked。未发现本轮交互阻断缺陷。

环境、候选和授权

  • 本机BE既有106 feature@700740e85740bad29f4b3a8fc38977496528f4a4、API127.0.0.1:8000;FE既有106 feature@a61681de6460f07fcfcb008eb973e0f5ed86803b加5文件冻结候选,Web127.0.0.1:8888。Ops env-ready/migration guard引用本包ops目录;QA未修环境、切分支或迁移。
  • FE组合hash:0e6e0358ba7fb044e8557919145125a5fd1e20ec5b76d3078bd555f32fec3d06。5文件逐项hash在业务执行前及收尾后均与candidate.json相同,未修改产品源码。开发35项/格式/lint/build直接复用,不重复计QA数量。
  • 用户明确允许本机恢复、仅既有LOCAL-R1合成对象flag确认/恢复;针对页面缺catalog另明确“允许,补齐后继续页面验收”。只通过公开API新建3条精确type=page,parent_path=null catalog,未改角色/RolePermission或接口权限。
  • 正常页面登录:bw原专用本机admin身份,profile account1/role admin。Space7/p1独占;凭据仅内存,不打印/落盘。不使用staging148/149或生产身份。

原前置Blocked的恢复链

原记录保留于permission-block-report.md、admin-permission-summary.json及真实权限拒绝截图;当时无业务flag写,不能改写为当时已通过。用户放行后fresh查重,创建catalog29 /project_tasks/:task_id/edit、30 /tasks、31 /projects/:id/add_project_task,均唯一名称QA106-MARGINCONFIRM前缀、page/null,正常profile刷新后进入页面。没有增加宽泛父路由、角色授权或12条旧权限包。

本次是原前置解除后的继续执行,不重复已通过功能、不覆盖Redmine旧Fail,也不把原权限拒绝当成此次新交互产品失败。

fixture、请求与DTO证据

fresh正常GET核对LOCAL-R1唯一memo、company/project及Ops manifest:Task2 finished/unpaid、cost16 unpaid;Task3 finished/unpaid无成本;Task21 finished/paid、cost23 paid。按primary再次明确的既有进行中授权,只读定位Task4 ongoing、memo LOCAL-R1:c、project3/company b,保存完整基线后执行flag往返,没有改状态造样本。四个Task原flag均false。

真实操作计数:10次成功Task PUT(均HTTP200、严格仅一个布尔flag)、1次浏览器故障注入发网前阻断,0成本写、0创建请求/新Task。 Task2两次,Task3四次成功(普通2、快捷1、恢复1)另一次注入,Task21两次,Task4两次。不是11次真实HTTP写;注入不冒充服务端错误。

观察器只记方法/path、单flag形状判定、状态/阻断标志,不保留headers/token/草稿值。sessionStorage跨导航保留计数;发现ego的CDP新文档脚本不跨后续调用保持后,每次导航在交互前显式重装observer,操作窗口计数完整;不宣称未观察的页面初始化区间是全网抓包。创建观察窗口另捕捉并预防所有相关Task创建POST,实际未触发。

11份逐步DTO对照均仅有flag/毛利投影允许变化,金额、状态、其余业务字段及完整成本一致。Task2和21的未提交memo草稿在标记保存后仍在页面,服务端memo原值不变;刷新后页面回到服务端memo。最终四个Task 完整DTO包括完整成本精确等于原基线(非仅检查flag)。

本轮逐项结果

以下稳定编号均以前缀QA106-MARGINCONFIRM-组成;完整逐项前置、操作、预期、实际和证据见results.json。层级为本机真实浏览器/API,CLEANUP为恢复读回;影响关联为本包普通/快捷单字段确认、创建复制边界,父#35。

编号后缀 操作/预期 实际结果 状态 证据
CANCEL 普通页切flag后取消,零写且保留草稿 Task2取消后counter0、checkbox false、未提交memo仍在 Pass cancel-result.json、03图
FINISHED-COST 有成本finished正常确认、刷新、恢复;仅flag写 Task2 false→true→false,两次HTTP200单flag、0cost,刷新持久;成本16完整不变 Pass task2-confirm/refresh/restore-result、04/05图
FINISHED-NOCOST 无成本finished不提交完整表单也能确认 Task3 false→true→false,两次窄PUT,草稿保留、无成本 Pass task3-true/false-result、dto-comparisons
PAID 已付邻接场景保持金融锁及其他草稿 Task21/cost23 paid保持,flag往返成功,未提交memo未落库 Pass task21-true/false-result、08图
ONGOING 真正ongoing既有Task确认并恢复,不改状态 Task4 false→true→false、仍ongoing,最终完整DTO恢复 Pass ongoing-readonly-candidates、task4-true/false-result
QUICK 快捷只用原弹窗确认一次;取消零写 Task3取消零写、确认单PUT后关闭,无第二弹窗,GET true;普通页合法恢复false Pass quick-cancel/confirm/restore-result、09视口图
FAULT 一次浏览器发网前阻断,不冒成功/不自动重试 Task3正常GET仍false,显示“已核对当前标记,请确认显示结果后再操作”,草稿保持;明确非真实服务端错误 Pass task3-fault-result、06图
CREATE 普通创建仅勾选不即时写或弹确认 project3创建页默认false,切true再false,counter无增量,未按提交 Pass ordinary-create-observation、12图
QUICKCREATE 快速创建标记仍随原表单提交 原快速任务弹窗勾选本地true,0写、无额外弹窗,取消未创建 Pass quick-create-observation、13图
COPY 真实复制入口仅观察、不新增Task Task3复制按钮进入project2创建页,默认false、勾选true零write;未提交。未声称true源flag复制重置已实测 Pass copy-observation、14图
ROLE-BOUNDARY 其他角色/实际只读关系验证,不改变权限补样本 本轮仅admin1;finance/PM未获得本轮合法页面/只读关系实测,不扩角色或授权,其余角色未测 Blocked catalog-baseline、admin-permission-summary;沿用primary不扩role权限决定
CLEANUP 恢复flag、删除仅新增catalog、登出关闭空间 四Task整DTO恢复;catalog29/30/31无children/role refs后删除;profile/catalog/roles精确等于原基线;观察器清除、正常登出、Space7 finish一次 Pass flag-restoration-verification、catalog-restoration-readback、observer-cleanup、logout-readback、browser-closeout

截图/图文结论与边界

本轮真实本机截图均摄于2026-11-02、管理员account1;不是旧staging图或组件mock。01–05范围UI已由primary回传目视Pass,无需重复送审。清晰视口补充为09-quick-confirm-viewport.png:展示唯一快捷确认弹窗和标记区域,只证明确认前界面;成功、次数和数据结果由quick-confirm-result及counter/DTO另证。该补图不加case。

10/11图在动画期取得clip位置,结果截断,原文件保留但不选作交付截图或通过证据;已结束空间,不为重拍扩写业务。完整图02及已通过的01–05仍保留。图文导航见visual-guide.md。

页面原有推荐背景必填红框、金额区NaN及标题缺Task号属于现有fixture/旧页面背景,不影响本轮flag窄保存;本包未修、不扩大为新回归结论。Task与成本识别以URL/DTO/manifest核对,不凭截图空标题臆测。

ROLE-BOUNDARY未通过,不能宣称全角色或完整#106全量QA通过;本轮也不验证真实服务端失败、双失败未知结果分支、真实并发、部署/生产或所有未改报表。相关源码guard/异常分支开发35项可复用,不能提升为本轮页面亲测。

收尾

catalog清理前逐ID/字段核对、无children、无角色引用;只删29/30/31。其后profile+catalog+roles完整基线一致,原账号/权限/业务数据未改。没有后台改DB恢复flag,也没有新增数据或提交表单草稿。

已正常接受退出登录确认,进入sign-in页并核实token cookie消失;不把浏览器登出夸大为已核实服务端token撤销。观察器wrapper/sessionStorage已移除;原CDP脚本ID已不存在,不重复添加,清理支持错误记录保留。Space7.finish({keep:[]})仅一次成功;noFurtherHTTPUI=true已通知primary,Ops后续只清其自有环境。QA不停止服务/PG。

支持过程有等待隐藏input超时、选择器歧义/迟到ref、截图clip及CDP脚本ID生命周期问题;未把它们计产品Fail,未重复不确定业务PUT,均以实际counter、同ID GET及当前DOM续行。测试原始结果和初始权限Blocked报告保留。

本轮仅写本包qa证据、已授权临时catalog及合成flag;无产品源码/环境/角色修改,无Git提交/推送/部署/生产操作。Redmine只向正确父#35批量追加本轮结果并全文读回,见writeback-receipt.json。

(25-25/34)