# #106 测试站图文验收结果 — beta.2 **本轮实际执行10项:9 Pass / 1 Fail / 0 Blocked / 0 Skipped。普通编辑finished/unpaid缺少保存入口,DEF106-02/[Redmine #37](https://redmine.mindsetech.com/issues/37),未全通过。** 列表快编、40%、全排除系数1及KM链已通过,不能覆盖该普通编辑Fail。 日期:2026-10-31 Asia/Shanghai;环境仅https://tcrm.mindsetech.com + https://tcrm-api.mindsetech.com/v1。截图均为本轮部署后的真实测试站页面,非本地旧图。本文是图文测试报告,不冒称正式员工手册。 ## 实际候选与角色 - Backend **1.20.15b2**,`473cc345af4898a624966c88eb63016c9e0a5d1a`;Web **2.16.9-beta.2**,`578fdc8d9389b8287ffadeee8fd1b483d65fcda1`。 - Ops实际镜像/源文件/公网bundle/测试API base、0028正向迁移及105三表保留、实际server/worker专用staging DB/broker/result/queue收据已消费。两CI production阶段均跳过。QA未重复探DB/worker/资源健康。 - p1刷新后加载`index-BN4j6c55.js`及`login-CXdZLjZK.js`,实际版本beta.2,profile200/code200、管理员**20 active**。财务19/PM16在准备阶段正常认证及权限核对,未把他们写作本轮全部角色UI已验收。账号来自BW“NDB 专用测试账号”,不改角色/姓名/密码。 - 原49项是本地独立证据,沿用#35 journal349、DEF36 j347/348及原影响比较;**不计成49项新版staging Pass**。Ops合并交叠BE2/FE7聚焦证据单独复用,非QA新增执行数。 ## 唯一合成对象与状态 RUN:`QA106-STAGING-20261031-R1`。客户15、合同23、联系人11、项目96、自动首条需求31、本轮ProjectCandidates **27**;A **Task148**、B **Task149**、C **Task150**;A唯一成本 **42**。总计10个显式新对象、3Task/1Cost,未复制第四条Task。 只读引用既有纯合成专家574245;账户25虽同属该专家但实际缺银行、ready=false,**未引用或补改**。新成本用无旧主档ID的完整合成快照,105严格字段就绪检查ready=true,无豁免/审批。 最终保留:A148 finished/计入/收入1000;B149 finished/不计入/收入1000;C150 ongoing/不计入/收入null;成本42 600RMB/unpaid。PM16/PA20、项目96/需求31;公司销售归属20/16由新Task完成快照捕获,年度API本客户owner各1000、无缺归属Task。未登记实际奖金、付款或审批。 ## 实际用例表 | 编号 | 影响 | 用例/实际结果 | 状态 | 证据 | | --- | --- | --- | --- | --- | | QA106-STG-ENV | IMP106-12 | 消费Ops收据并p1实际加载beta.2/测试API、profile20 active;0028/worker隔离不重复现场探测 | Pass | `actual-browser-candidate.json; runtime-gate.json` | | QA106-STG-CREATE | IMP106-01/09 | A148/B149直接finished、各1000/flagfalse,项目96/需求31/PC27;年度客户15实际owner16/20各1000,ownMissingOwnerTaskIds为空 | Pass | `task-a-after-create-read.json; task-b-after-create-read.json; final-task-incentive-owners-read.json` | | QA106-STG-QUICK-CREATE | IMP106-01 | UI唯一POST创建C150,project96/requirement31未新建;ongoing、flagtrue、收入null,精确GET证明归属 | Pass | `ui-quick-c-result.json; c-exact-detail-read.json` | | QA106-STG-QUICK-EDIT | IMP106-01/11 | 真实UI B149 true→false→true,各1TaskPUT/0CostPUT;项目70%→40%,原金融字段不变;保存后重新打开仍true | Pass | `ui-quick-b-include-result.json; ui-quick-b-exclude-result.json; ui-pair-assertions.json` | | QA106-STG-PAIR | IMP106-02 | 原2000/600毛利70%;排除B后basis1000/600、40%,原收入2000与成本600不变;API+项目实际列表图 | Pass | `baseline-project-list-read.json; pair-assertions.json; ui-quick-project-40-read.json` | | QA106-STG-NEUTRAL | IMP106-08/09 | A/B均排除时excluded2/applicablefalse,项目legacy数值0但UI不适用;激励年度factor1、fallback;原2000/600与归属资格保留 | Pass | `neutral-assertions.json; neutral-ui-incentive-read.json; neutral-ui-basis.json` | | QA106-STG-KM | IMP106-10 | Task149 actual_income1000、cost0、flagtrue,KM真实行可见,不因毛利标签隐藏 | Pass | `km-excluded-b-read.json; km-ui-refresh-and-link.json` | | QA106-STG-REFRESH | IMP106-10 | 真实刷新完成一次GET200/code200仍返回B149,UI行不计入;点击到/project_tasks/149;列表/项目刷新读回保持结果 | Pass | `km-ui-refresh-and-link.json; final-task-b-read.json` | | QA106-STG-COST-SNAPSHOT | IMP106-11 | 成本42完整独立合成snapshot readytrue、600RMB unpaid;无payment_info_id/旧id;最终DTO与创建后相等;账户25仍缺银行,不改主档/豁免 | Pass | `cost-a-after-create-read.json; final-a-costs-read.json; final-reference-account25-read.json` | | QA106-STG-ORDINARY-EDIT | IMP106-01/11 | 管理员20,B149 finished/unpaid,checkbox未禁用可勾但无保存/更新按钮,0编辑请求;primary确认DEF106-02,Redmine37;不被快编Pass覆盖 | Fail | `finished-unpaid-edit-ui-gap.json; final-task-b-read.json` | 原始脱敏证据与唯一当轮台账:`outputs/issue-106-implementation-20261030/qa/staging-20261031/actual-results.json`;本轮后端影响按环境追加到同一`backend-impact-regression.md`,不复制第二套业务矩阵。 ## 真实图文 ### 快速创建C及列表快编 ![真实快速创建C的本轮输入](assets/issue-106-staging-20261031/01-quick-create-c.png) 图1:管理员20在测试站选择已有客户15、项目96、需求31、PM16/PA20及合成专家574245,勾“不计入毛利率”。唯一POST返回Task150,随后明确ongoing列表及精确detail独立GET核归属;收入null不进入A/B统计样本。 ![Task149统计标记保存后重新打开](assets/issue-106-staging-20261031/07-quick-edit-b-flag.png) 图2:从本轮Task列表的**149行**进入“编辑毛利率统计标记”,保存后只读重新打开,标记true;取景不显示Task号,具体映射由`ui-quick-b-exclude-result.json`的一次`PUT /v1/tasks/149`及精确GET绑定,不把图单独当ID证明。两次快编true→false→true各1TaskPUT、0CostPUT,金额/credit/成本保持。 ### 70%变40%,真实金额保留 ![项目96排除B后的40%](assets/issue-106-staging-20261031/04-project-exclude-b-40.png) 图3:**#000096是项目号**,其中A148收入1000/成本600、B149收入1000/成本0。基线70%,排除B后参与基数1000/600,页面40%;原实际收入2000、成本600保持。C150无收入且ongoing,不参与这组毛利计算。图为最终A=false/B=true重新加载后的真实状态,接口金额见pair/ui-pair原始证据。 ### 全部排除,无有效基数时系数1 ![本轮公司15全排除的年度基数与系数1](assets/issue-106-staging-20261031/08-incentive-neutral-factor1.png) 图4:**#15是客户号**,2026年度参与收入/成本0/0、排除Task数2、适用性“不适用(无有效基数)”、系数1,说明“排除后没有计算基数,系数按1”。这是A/B同时排除阶段截图;最终已把A恢复计入以保留40%复现场景。项目接口旧数值仍0,由独立`applicable=false`驱动页面“不适用”,不是假称真正0%毛利。 ### 排除毛利统计不隐藏KM提醒 ![零成本提醒仍显示已排除的Task149](assets/issue-106-staging-20261031/06-km-excluded-b.png) 图5:仅取本轮**Task149/项目96**及表头,收入1000RMB、成本0、不计入毛利率。实际点刷新后一次GET200/code200仍返回该行,点击#149跳到确切详情;无其他业务记录写入。 ### 普通编辑失败边界 ![finished unpaid普通编辑没有保存入口](assets/issue-106-staging-20261031/02-finished-unpaid-no-save.png) 图6:正确URL为`/project_tasks/149/edit?project_id=96`,图中**#96是项目号,行业主题task b对应Task149**。已结束/未付款任务的统计框未禁用,但标题仅返回/Card等,无保存/更新。没有发出普通编辑PUT,截图中其他必填背景空值不是无按钮的原因;primary/Web已确认header的非关键编辑模式判断漏finished/unpaid。已附[#37附件122](https://redmine.mindsetech.com/attachments/download/122/02-finished-unpaid-no-save.png)。不得以快编成功改成普通编辑Pass,也不改付款状态/转ongoing绕过。 六张图均由QA查看;具体采集时间、SHA256、版本和角色见`screenshots.json`。图1采集约19:00,图4约19:10;图3/图6为最终取景,时间和标记阶段不同已在图注解释,没有混写成同一次快照。 ## 失败、复用与安全边界 DEF106-02在本轮beta.2仍Fail;Web本地最小修复不等于新版本部署或QA重测。本轮未修改产品源码、版本、Git、环境、数据库或旧105实体。后续若获准部署修复,只复测受影响普通编辑及必要相邻保护,保留这些未受影响的beta.2证据与来源。 每个实际业务写均先存intent,未知结果禁止自动重放。快速创建最初读列表因未指定状态看不到ongoing C,后以显式ongoing和精确ID GET闭合,无第二POST;项目无基数旧数值0预期曾错写null,按当前契约修正断言;cost detail无GET改用Task成本列表。上述runner/导航/横向定位纠正均留原响应,不计产品Fail、不重发创建。 未调用支付状态、实发确认、开票、审批、通知、反馈、会议创建、ES或DB写。普通API内部入已核staging队列属本包允许;源码对finished/data/recordfalse在日程/MQTT前早退,最终三Task recording_schedule=null;**未读取Celery结果,不把源码skipped冒称实际队列回执**。新项目关联显式PC27,空link_code,不编辑旧专家/账户/旧项目关联。新成本快照全合成,不展示收款明文。 原本地未测角色/会议专用路径、复杂预付/补结、团队3%阈值、压力及共享服务边界仍按矩阵保留。此次不制造这些额外数据,不把9Pass当全角色/全功能通过。专用账号active与本轮RUN数据保留;Space1/p1暂留同目标可能的定向回归,Ops p2已收尾;无本轮guard残留。正式员工手册仍作为后续工作,本文只交付测试图文。 ## 复核与回写 UI/项目只读图文复核待primary安排,不冒称通过。Redmine #35测试站R1按逻辑批次写回,原本地journal349保留;写回及读回编号以同目录`redmine-writeback-receipt.json`为准。#37已创建并读回、状态新建,QA不自动关闭。