QA验收 #35
openCNB #106|Task毛利率排除与KM零成本提醒|本地独立验收
0%
Description
CNB #106 本地独立QA准备¶
主任务:01a186ac-ec98-7ea0-a6c6-019adec6c63a,Mindsetech Agent Team。来源:CNB Backend #106。
唯一事实索引:106 index。主需求:Task毛利率排除与KM提醒。唯一影响/回归矩阵:Backend IMP106/REG106。QA操作包:local-qa-operation-package。以上本机链接基于canonical协调根。
范围:Task严格bool标记及普通/快速创建编辑兼容;全部毛利率收入成本成对排除,实际收支/销售收入/提成资格保留;激励无基数factor1、有flag客户年度用剩余Task实时基数,无flag保留旧人工成本优先级;历史confirmed/实发/snapshot零回写;KM上海六日历月实际非零收入/成本净和0提醒,flag不隐藏,服务端权限和分页前筛选;相关真实工作簿。
候选:两仓feature/issue-106-gross-margin-exclusion,main基线BE74767130/FE08cb3da9,未提交开发候选待冻结。开发自测和独立QA分层,不把开发日志当QA亲测,不借105的31/5项计数。
用户要求使用现有本机开发库。Ops拟核现有本机ndb_issue105_20261030的准确身份与106迁移兼容性;不新建库、不复制/清库、不修改原105业务数据。QA仅本轮QA106-LOCAL-20261030-R1新对象可写;业务fixture唯一writer拟为QA,Ops仅环境/必要兼容迁移。当前仅文档、离线护栏、限定BW账号库存和本记录建立获准;正式产品QA、环境启动/DB seed尚未执行,待候选freeze及Ops env_ready一次放行。
本记录专属106。后续每个实际case按逻辑轮次批量追加、全文读回;失败关联稳定缺陷。当前产品执行0、Pass0;不审批、不企微、不动生产/105申请,不提交/推送/部署,不改已有账号密码角色,不新增更多账号。没有设置watcher/assignee或发送额外人员消息。
Files
RA Updated by Redmine Admin 12 days ago
QA106 本地真实接口首批结果¶
环境:127.0.0.1:8000/8888;复用现有本机库ndb_issue105_20261030,仅QA106-LOCAL-20261030-R1合成对象。Backend源摘要7dfbb450759c,Web82d775f32784(UI106-01纯文案增量),两仓feature/issue-106-gross-margin-exclusion,未提交。
本批实际15 Pass / 0 Fail / 1 Blocked;这是REG子场景,不表示REG01/11全量或全部QA通过。开发179/330测试不计本批。权限前置与ENV106-01分开:CORS修复后Space53正常浏览器登录、profile HTTP200/code200闭合;现管理员页面权限不足,UI创建未执行,无角色修改。
| 编号 | 影响 | 操作与实际 | 状态 | 证据(outputs/issue-106-implementation-20261030/qa/) |
|---|---|---|---|---|
| QA106-API-01 | IMP106-01 / REG106-01 | 普通创建省略标记:默认false;Task2读回false | Pass | round-01-api-a-readback-result.json |
| QA106-API-02 | IMP106-01 / REG106-01 | 快捷创建true:Task3读回true、同QA项目2 | Pass | round-03-api-b-readback-result.json |
| QA106-API-03 | IMP106-01 / REG106-01 | 单独标记true投影:毛利null、applicable=false、基数0/0、真实收入1000保留 | Pass | round-02-flag-true-read-result.json |
| QA106-API-04 | IMP106-01 / REG106-01 | 拒绝null:HTTP200/业务400;标记仍true | Pass | round-02-invalid-null-result.json |
| QA106-API-05 | IMP106-01 / REG106-01 | 拒绝number:HTTP200/业务400;标记仍true | Pass | round-02-invalid-number-result.json |
| QA106-API-06 | IMP106-01 / REG106-01 | 拒绝string:HTTP200/业务400;标记仍true | Pass | round-02-invalid-string-result.json |
| QA106-API-07 | IMP106-01 / REG106-01 | 更新省略保值:改本轮memo省略标记,仍true | Pass | round-02-omission-read-result.json |
| QA106-API-08 | IMP106-01 / REG106-01 | 恢复false:读回false,实际收入仍1000 | Pass | round-02-restore-read-result.json |
| QA106-LOCK-processing-PM | IMP106-11 / REG106-11 | processing PM单独标记:HTTP200/code200;除标记/毛利投影及更新时间外Task/成本读回全字段不变 | Pass | round-04-lock-assertions.json |
| QA106-LOCK-processing-MIX | IMP106-11 / REG106-11 | processing 混合金额修改拒绝:HTTP403/code403,完整读回不变 | Pass | round-04-lock-assertions.json |
| QA106-LOCK-processing-PA | IMP106-11 / REG106-11 | processing PA单独标记:本轮PA=身份3,HTTP200/code200;该身份在Task2无关联另验拒绝 | Pass | round-04-role-interpretation.json |
| QA106-LOCK-paid-PM | IMP106-11 / REG106-11 | paid PM单独标记:HTTP200/code200;除标记/毛利投影及更新时间外Task/成本读回全字段不变 | Pass | round-04-lock-assertions.json |
| QA106-LOCK-paid-MIX | IMP106-11 / REG106-11 | paid 混合金额修改拒绝:HTTP403/code403,完整读回不变 | Pass | round-04-lock-assertions.json |
| QA106-LOCK-paid-PA | IMP106-11 / REG106-11 | paid PA单独标记:本轮PA=身份3,HTTP200/code200;该身份在Task2无关联另验拒绝 | Pass | round-04-role-interpretation.json |
| QA106-LOCK-UNRELATED | IMP106-11 / REG106-11 | 无关联身份拒绝:身份3对Task2(PM2/PA1)HTTP403/code403,原false不变 | Pass | round-04-unrelated-task-a-result.json |
| QA106-UI-CREATE-PRECONDITION | IMP106-01 / REG106-01 | 三UI创建入口权限:管理员ID1缺/projects和Task页面权限,导航被挡回;PM2无页面权限。账号角色未写 | Blocked | ui-permission-gap.json |
写保护:父对象15条及独立Task/成本20条seed成功;原数据摘要未变。初始金融seed因配方缺开票主体及状态枚举错误整批回滚,rollbackOriginalDigestsUnchanged=true,不记产品Fail;金融专项尚未执行。A/B/C真实API创建Task2/3/4已读回,另保留3个UI槽,总Task预算17<=18,成本9。
下一步:继续KM/数值/报表/实际工作簿与历史不变性;UI需最小页面权限前置,金融需合成开票主体。无新基础设施、旧对象写、生产、通知/审批/资金、commit/push/deploy。
RA Updated by Redmine Admin 12 days ago
QA106 本地真实应用第二批结果¶
候选/环境沿用journal339:Backend7dfbb450759c、Web82d775f32784未提交差异,本机8000/8888及现有ndb_issue105_20261030。实际25 Pass / 1环境Fail / 5 Blocked。以下为同一IMP/REG的有界子场景,不把开发179/330项计入,不表示全量QA通过。首批15接口Pass不重跑、不重复计本批。
| 编号 | 影响 | 用例与预期 | 实际 | 状态 | 证据(outputs/issue-106-implementation-20261030/qa/) |
|---|---|---|---|---|---|
| QA106-CORE-PAIR | IMP106-02 | 项目A/B配对基数;2000/600毛利70%;排除B后1000/600为40%,原收入2000 | 项目2实际0.7→0.4;原收入2000保留 | Pass | round-08-project-assertions.json |
| QA106-CORE-EMPTY | IMP106-02 | 全部排除无基数;基数0/0不可计算、原收入保留 | 项目2排除数2/applicable=false;原收入2000 | Pass | round-11-all-exclude-project-result.json |
| QA106-FINANCE-DIFF | IMP106-03 | 财务统计差分;仅毛利基数变化,年度/月度原金额保持 | 公司2 70→40,收入2000/成本600;原月度数组完全相同 | Pass | round-10-report-differences.json |
| QA106-PM-DIFF | IMP106-04 | PM总额与平行基数;原income/cost不变,排除B收入1000出基数 | 原6400/2310保留;基数6400→5400/成本2310,profit63.91→57.22 | Pass | round-10-report-differences.json |
| QA106-UTIL-DIFF | IMP106-04 | PM工具相邻月份与无基数;新基数对齐,本月变毛利、其他指标/上月无基数旧值保留 | 本月同步57.22,上月值1且applicable=false;其他指标数组不变 | Pass | round-10-report-differences.json |
| QA106-SALES-OVERVIEW | IMP106-05 | sales-overview差分;原收入/成本/行身份不变,毛利按参与基数变化 | 所有原income/cost不变,公司2分摊基数500/300,毛利40;总览/月度依自身分摊口径 | Pass | round-10-report-differences.json |
| QA106-SALES-COMPANIES | IMP106-05 | sales-companies差分;原收入/成本/行身份不变,毛利按参与基数变化 | 所有原income/cost不变,公司2分摊基数500/300,毛利40;总览/月度依自身分摊口径 | Pass | round-10-report-differences.json |
| QA106-SALES-MONTHLY | IMP106-05 | sales-monthly差分;原收入/成本/行身份不变,毛利按参与基数变化 | 所有原income/cost不变,公司2分摊基数500/300,毛利40;总览/月度依自身分摊口径 | Pass | round-10-report-differences.json |
| QA106-INC-OVERRIDE | IMP106-07/09 | 无flag覆盖优先与有flag实时成本;无flag成本900;排除B后用A成本600,旧override零写 | 旧API无flag基数2000/900;有flag1000/600,原all_in_cost元数据900仍保留 | Pass | round-10-report-differences.json |
| QA106-INC-NEUTRAL | IMP106-07/09 | 全部排除中性系数与资格;系数1,原收入及owner股/增量/提成资格保持 | income2000,factor1;两owner各income1000、increment1000、commission60 | Pass | round-11-all-excluded-assertions.json |
| QA106-RECEIPT-BASIS | IMP106-08 | 回款DTO实时基数形状;company+year定位,factor_source明确,不暴露私有内部对象 | company2/year2026:0/0,excluded2,factor1/source excluded_tasks_fallback;仅投影验证,FIFO另待fixture | Pass | round-11-all-excluded-annual-receipt.json |
| QA106-HISTORY-UNCHANGED | IMP106-09 | 确认/实发/归属/override零回写;标记变更前后历史全字段一致 | 真实PG7表14行digest一致;含override、季度预发、年终实发、年度结算、补结、Task归属 | Pass | history-before-all-exclude.json + history-after-restore.json |
| QA106-YEAR-LOCK | IMP106-09 | 已结算年度锁;不能覆盖已有本轮年度/季度实发 | 真实HTTP200/code400:该年度已有结算,不能覆盖原实发记录;14历史行不变 | Pass | round-15-annual-lock-result.json |
| QA106-INC-XLSX | IMP106-07/08 | 全排除实际Excel;下载成功,说明sheet数据与中性系数一致 | 两GET均取得实际xlsx;毛利率计算基数A2:G2=[2,2026,0,0,2,否,1];两路共享导出实现,仅计一case | Pass | round-11-workbook-cells.json |
| QA106-KM-DATES | IMP106-10 | 实际六个月安全内外点;下界内记录进、外/未来/空不进 | 23入;22/24/25不入;移动时钟精确边界未冒称实测 | Pass | round-05-km-assertions.json |
| QA106-KM-SIGNED | IMP106-10 | 负收入及状态;负收入非零可提醒,无额外finished限制 | Task18负100/ongoing及Task23 cancelled均返回 | Pass | round-05-km-assertions.json |
| QA106-KM-FX | IMP106-10 | 多币种净零与删除成本;按实际RMB净成本计算,删除成本忽略 | Task19收入1400、成本0;±100USD净零,deleted77USD未计 | Pass | round-05-km-assertions.json |
| QA106-KM-FLAG | IMP106-10 | 排除不隐藏提醒;B标记true仍显示 | Task3 income1000/cost0且flagtrue返回,真实首页也显示 | Pass | round-05-km-assertions.json + km-reminder-real.png |
| QA106-KM-PAGING | IMP106-10 | 分页稳定顺序;分页前筛、时间/ID倒序、无重复漏项 | page_size2 两页精确[19,18,3,23],总4无重叠 | Pass | round-05-km-assertions.json |
| QA106-KM-SCOPE | IMP106-10 | user_id不能扩权;未关联Task不因query扩出 | 身份3传user_id2仍不返回无关联Task3,保留其PA范围3条 | Pass | round-05-reminders-pa-scope-result.json |
| QA106-KM-ZERO-NULL | IMP106-10 | 明确0与null回退;0不得当缺失,null按原费用回退 | cost19明确0时净成本非0不提醒;null回退100与-100抵零后提醒 | Pass | round-12-fx-assertions.json |
| QA106-KM-REFRESH | IMP106-10 | 最小非零移出与恢复;非零成本刷新移出,恢复净零重现 | company_payment100.01不提醒,恢复100.00后再次提醒;汇率未写 | Pass | round-12-fx-assertions.json |
| QA106-UI-DETAIL | IMP106-01/02 | 真实详情标签;同Task显示不计入,原金额与ID可核 | Space53 Task3详情显示不计入/1000RMB,截图已目视 | Pass | task3-excluded-real.png |
| QA106-UI-KM | IMP106-10 | 首页刷新/链接;刷新仍有排除B,Task链接正确 | 真实卡显示4条,刷新后点#3到/project_tasks/3并读到标签,截图已目视 | Pass | km-reminder-real.png |
| QA106-PG-RACE | IMP106-11 | 两角色并发单标记;两请求合法,不破坏其他Task/processing成本字段 | 单轮2请求均200/code200,最后flagfalse,其他全字段不变 | Pass | round-14-race-assertions.json |
| EXP106-01 | IMP106-06 | 专家费用真实导出;仅成本16/23应返回工作簿 | HTTP500/text-html,123603bytes,无xlsx;完整开始时间;未重试,Ops诊断中;Ops已确认协调根启动导致相对模板FileNotFoundError(views.py415),未进入106填充逻辑,属环境失败;待Ops cwd修复后同16/23复测一次 | Fail | round-13-expert-export-receipt.json;环境缺陷关联#35/EXP106-01(primary确认,不另建业务缺陷) |
| QA106-UI-CREATE-ordinary | IMP106-01 | ordinary真实创建;页面正常选择必填人员并提交读回 | ENV106-02页面权限已补;但ID1/2 name_en均null被options过滤,PA必填无可选项;未绕过或改账号 | Blocked | ui-display-name-gap.json |
| QA106-UI-CREATE-quick | IMP106-01 | quick真实创建;页面正常选择必填人员并提交读回 | ENV106-02页面权限已补;但ID1/2 name_en均null被options过滤,PA必填无可选项;未绕过或改账号 | Blocked | ui-display-name-gap.json |
| QA106-UI-CREATE-copy | IMP106-01 | copy真实创建;页面正常选择必填人员并提交读回 | ENV106-02页面权限已补;但ID1/2 name_en均null被options过滤,PA必填无可选项;未绕过或改账号 | Blocked | ui-display-name-gap.json |
| QA106-RECEIPT-FIFO | IMP106-08 | 真实回款FIFO/分票税/预付owner;有有效本轮发票/回款关联再比对 | seed金融批次已完整回滚;缺合成InvoiceCompanies必需引用,尚未写额外模型 | Blocked | seed-after-ui-rollback01.json |
| QA106-TEAM-NUMERIC | IMP106-04 | 团队派生分母实数行;真实团队行验证排除与原credit/分钟不变 | 实际团队接口200但data=[],无团队关系fixture,不能空结果冒称数值通过 | Blocked | round-09-flagged-team.json |
前置/历史边界¶
- ENV106-01 CORS已由Ops修复且QA Space53正常登录/profile200闭环。ENV106-02按primary精确包临时建12目录/7PM page grants,角色/密码/active未改;有新增ID/基线及恢复脚本。新阻塞为注册测试身份name_en缺失导致人员选项被过滤,未自行改账号或注入表单。
- 正常A/B完成请求500均按ID读回ongoing,未盲重试。primary明确允许仅本轮A/B受控初始化finished作报表前置,真实HTTP读回;不冒称正常完成流程Pass。纯A/B是项目2,项目3边界fixture总额不是2000/600。prior-year Task26为隔离项目样例暂转ongoing,跨年回款前置尚未恢复。
- 专家导出EXP106-01由primary确认环境启动cwd导致模板文件找不到;原HTTP500保留,待Ops收据后同样合法16/23重测,禁止用年度Excel成功覆盖。
- 两年度Excel接口共享receipt exporter,实际工作簿验证只计一个case,不误称两个独立导出实现。回款FIFO/分票税/预付依赖的金融fixture尚缺开票主体,不能用空owners/零回款结果算通过。
- 全部已写对象为本RUN。全局FX只读;历史7表14行真实PG全字段摘要相同;未源码改动/commit/push/deploy/生产/真实外发。临时权限待QA完毕精确恢复,现保持Space53继续,不关闭。
RA Updated by Redmine Admin 12 days ago
- Subtask #36 added
RA Updated by Redmine Admin 12 days ago
QA106 第三批:UI创建、支付冻结元数据编辑、导出环境复测¶
候选同journal339/340:BE7dfbb450759c、Web82d775f32784,未提交;本机现有ndb_issue105_20261030,Space53。实际6 Pass / 1 Fail。三条创建原Blocked前置现已通过;EXP106-01原环境500由Ops cwd修复后专项Pass,旧历史保留。其他通过不重跑/不重复计本批。
| 编号 | 影响 | 实际与判定 | 状态 | 证据(outputs/issue-106-implementation-20261030/qa/) |
|---|---|---|---|---|
| QA106-UI-CREATE-ordinary | IMP106-01 | 普通表单新Task27,默认false;1POST,is_recorded=false,data形式,无成本;独立GET读回 | Pass | round-19-ui-ordinary-result.json + round-19-ui-ordinary-readback-result.json + ui-ordinary-created27-real.png |
| QA106-UI-CREATE-quick | IMP106-01 | 快速弹窗新Task28,选true;1POST,复用项目3/需求3,无额外父对象;GET true | Pass | round-20-ui-quick-result.json + round-20-ui-quick-readback-result.json + ui-quick-true-real.png |
| QA106-UI-CREATE-copy | IMP106-01 | 从Task列表点击标记true的Task3复制;新Task29默认false,1POST及GET确认;data形式无录音/会议 | Pass | round-21-ui-copy-result.json + round-21-ui-copy-readback-result.json + ui-copy-default-false-real.png |
| QA106-UI-PAID-QUICK | IMP106-11 | Task21 finished+paid,快编仅切flag;1 TaskPUT字段仅exclude_from_gross_margin,0costPUT;其他Task/费用全字段不变 | Pass | round-17-ui-paid-request-counts.json + round-17-ui-paid-quick-before-result.json + round-17-ui-paid-quick-after-result.json + paid-quick-edit-real.png |
| EXP106-01-RETEST | IMP106-06 | Ops cwd修复后原成本16/23实际xlsx;Task2毛利40.00%、Task21不计入,600/200金额及RMB/冻结快照账号户名匹配。原环境500保留,非算法修复 | Pass | round-18-expert-workbook-final.json + round-18-expert-export.xlsx + ../ops/exp106-01-repair.json |
| QA106-UI-NEUTRAL-BASIS | IMP106-08/09 + UI106-01 | 实际激励页展开company2/year2026基数0/0、排除2、适用性不适用、系数1;表头毛利系数及说明业务文案正确;未点实发 | Pass | incentive-basis-neutral-real.png |
| QA106-EDIT-DRIFT-01 | IMP106-11 | 普通编辑Task21 finished+paid仅切flag,1TaskPUT/0costPUT/200,tax_rate null→0.00000、charge_days null→30、credit0→2.339;费用未变。缺陷#36待primary确认owner,现场不回滚 | Fail | ordinary-edit-drift-defect.json + round-22-ui-ordinary-edit-assertions.json;https://redmine.mindsetech.com/issues/36 |
普通编辑失败挂子缺陷#36,已读回。QA不指派源码owner、不修业务代码、不还原合成现场;快编通过不能覆盖普通编辑失败。当前paid fixture是finished,不强改为ongoing,也不冒称该另一分支已实测。
临时环境前置:ENV106-02按授权补12 Permission目录/7 PM page grants;ENV106-04重新BW核对身份后只改id1/2 name_en为QA106合成显示名,其他账号字段全字段相同。两类均保存精确基线/新增IDs/恢复脚本;QA尚在进行,待最终回归结束精确恢复,不留永久资料变更。
合成17 Task、9成本,未超18/9;所有新ID已入fixture-manifest。UI普通日期首次未确认被前端校验拦截,0网络写;确认合法时间后只提交1次,不算业务重复失败。其余未执行:真实回款FIFO/税/预付需1条合成InvoiceCompanies必需父对象及跨年前置;团队数值行无fixture。精确移动时钟边界/破坏性迁移图未冒称真实验证。无新infra、旧105业务改动、FX写、真实外发、产品源码改动、commit/push/deploy。
RA Updated by Redmine Admin 12 days ago
主任务决定补充:DEF106-01 / Redmine #36 的唯一业务修复owner为 NDB Backend Agent责任线程 01a09aab-60e4-7632-b0a2-ac457725369d,第1修复轮已开始;不猜测/指定Redmine人类账号。根因、原Fail及null→0/30、credit0→2.339证据保持。待Backend freeze与Ops加载新manifest后,QA受控恢复同Task21原null/0/propertyNone哨兵,再实际普通UI及paid/processing安全metadata/API、金融混写拒绝回归;创建/导出/提醒等未受影响证据复用。临时Permission/name_en及服务保持供回归,现不清理。截图新批次5张及Task27/28/29/21、公司2/year2026映射已整理 outputs/issue-106-implementation-20261030/qa/ui-review-batch.json,交primary并入主索引后一次送UI;前2张既有截图不重复送审。
RA Updated by Redmine Admin 12 days ago
QA106现有基数表视觉用例只读补证(不增加Pass、不重跑整套):按primary要求在原Space53正常刷新/finance_incentives当前2026年度并展开基数表,未改flags、未操作确认/实发。公司2/year2026页面参与收入1000.00 RMB、成本600.00 RMB、排除1、适用、毛利系数1.0、说明“按毛利率计算”,与同次真实annual-dashboard API逐项一致。真实截图 outputs/issue-106-implementation-20261030/qa/incentive-basis-current-real.png;API/渲染行对照 round-24-ui-current-basis-readonly.json。截图已QA目视检查,并入ui-review-batch.json供primary/UI;此前7图primary已回传UI无确认视觉问题。本次仅补现有用例证据,46Pass/1Fail/2Blocked及#36原Fail不变,临时环境保持用于修复回归。
RA Updated by Redmine Admin 12 days ago
DEF106-01 第1修复轮真实本地复测结果¶
- 候选:Backend源5a33f07499a4763e8d681dfa552a89ec3ed410535203ae74281a350e9375de12,Web82d775f32784不变,实际Ops frame a19e523d959e81e49d8dbc5ec395808af358e74c4fccd993f78896e232a62b32;无提交/部署。
- 本轮实际:8条断言,映射6个既有用例,全部Pass;不是8个新增用例。不重跑未受影响41项既有Pass,2个fixture Blocked仍保留。最新49个独立子场景=47Pass/0Fail/2Blocked。原#36/round22失败完整保留,不宣称工单Closed或全量QA通过。
- 前置:仅Task21本轮合成对象按primary授权恢复tax_rate=null/charge_days=null/credit=0.000/property=null/flag=true,成本23/状态/金额未变,先HTTP确认原哨兵后才操作。
| 断言 | 既有用例 | 实际 | 状态 |
|---|---|---|---|
| DEF106-R1-ORDINARY-UI | QA106-EDIT-DRIFT-01 | 同原Task21 finished+paid普通UI,1次PUT keys=status/industry_subject/memo/exclude_from_gross_margin,0成本PUT,HTTP200/code200;原null/credit0及费用保持 | Pass |
| DEF106-R1-PAID-PM | QA106-LOCK-paid-PM | {"id":"DEF106-R1-PAID-PM","taskId":21,"http":200,"code":200,"flag":true,"otherTaskAndCostFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-paid-PM"} | Pass |
| DEF106-R1-PROCESSING-PM | QA106-LOCK-processing-PM | {"id":"DEF106-R1-PROCESSING-PM","taskId":20,"http":200,"code":200,"flag":true,"financialAndCostFieldsUnchanged":true,"unsubmittedProjectionDifferences":["interview_subject","cpe_dept","cpe_interview_id"],"status":"Pass","caseId":"QA106-LOCK-processing-PM"} | Pass |
| DEF106-R1-PAID-PURE | QA106-LOCK-paid-PM | {"id":"DEF106-R1-PAID-PURE","taskId":21,"http":200,"code":200,"flag":false,"otherFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-paid-PM"} | Pass |
| DEF106-R1-PAID-MIXED | QA106-LOCK-paid-MIX | {"id":"DEF106-R1-PAID-MIXED","taskId":21,"http":403,"code":403,"message":"请单独修改毛利率标记,不要同时修改结算字段。","allTaskCostFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-paid-MIX"} | Pass |
| DEF106-R1-PROCESSING-PURE | QA106-LOCK-processing-PM | {"id":"DEF106-R1-PROCESSING-PURE","taskId":20,"http":200,"code":200,"flag":false,"otherFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-processing-PM"} | Pass |
| DEF106-R1-PROCESSING-MIXED | QA106-LOCK-processing-MIX | {"id":"DEF106-R1-PROCESSING-MIXED","taskId":20,"http":403,"code":403,"message":"请单独修改毛利率标记,不要同时修改结算字段。","allTaskCostFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-processing-MIX"} | Pass |
| DEF106-R1-UNRELATED | QA106-LOCK-UNRELATED | {"id":"DEF106-R1-UNRELATED","taskId":2,"actorId":3,"pmId":2,"paId":1,"http":403,"code":403,"allFieldsUnchanged":true,"status":"Pass","caseId":"QA106-LOCK-UNRELATED"} | Pass |
精确字段边界¶
Task21普通UI前后:actual_price/total_price/tax/currency、收费时长、status=finished/payment_status=paid等金融字段及Cost DTO全字段不变;tax_rate仍null、charge_days仍null、credit仍0.000。真实PG只读核对property只包含请求显式提交的industry_subject;interview_subject/cpe_dept/cpe_interview_id三键仍不存在,没有默认键写入。公开DTO三项null→空串来自原有getter在property字典缺键时的显示默认;此差异已逐项保留,未宣称所有DTO字段相同,也未掩盖成未观测。
证据与复用¶
outputs/issue-106-implementation-20261030/qa/def-r1-results.json(含typed before/after)、def106-01-sentinel-reset-receipt.json、def-r1-task21-sentinel-http-before-result.json、def-r1-ordinary-ui-requests.json、def-r1-task21-ordinary-http-after-result.json、def-r1-task21-model-after.json、def-r1-related-api-assertions.json。各操作intent/result均保留,无token/secret。
原Fail/环境500及旧journals339/340/342不覆盖。#36只是QA修复验证通过,实际工单status待读回,不擅自写Closed。新问题唯一owner为Backend责任线程01a09aab-60e4-7632-b0a2-ac457725369d。创建/比率/Excel/提醒旧证据按影响复用,owner55项开发测试不计QA亲测。
剩余Blocked:真实回款FIFO/税/预付缺1条合成InvoiceCompanies父对象及跨年前置,未越model权限;团队数值接口无真实关联fixture。不能据此说完整49项均通过。临时name_en/权限清理将在本批Redmine读回后执行,账号保持active,保留全部QA106业务fixture,不改旧105/FX/源码,不停止Ops服务。
RA Updated by Redmine Admin 12 days ago
Issue106 本地QA最终结果 — 2026-10-30¶
当前49个既定业务子场景:49 Pass / 0 Fail / 0 Blocked / 0 Skipped。唯一逐条台账为qa/latest-case-index.json,唯一影响/回归矩阵为backend-impact-regression.md。这是限定本地候选范围结果,不是全角色、所有业务分支或发布批准。
候选与执行来源¶
本机8000/8888,沿用现有库ndb_issue105_20261030;BE source 5a33f07499a4763e8d681dfa552a89ec3ed410535203ae74281a350e9375de12,Web 82d775f32784e66b720c0115d9613c19115ceccd867816fec47b1c5d452d8379,Ops frame a19e523d959e81e49d8dbc5ec395808af358e74c4fccd993f78896e232a62b32。本轮复用Ops候选收据,不重复健康探测。
原47项Pass来自QA真实API/UI/本机PG/实际Excel,DEF106-01第一轮8断言覆盖6个既有case,#36 journal347/#35 journal348已读回。原失败仍留历史,工单状态不自动关闭。未把Backend179/55或Web330自测加入QA条数。
最后两项由任务primary(primary-support)唯一执行fixture写入,QA责任线程仅独立离线复核原始JSON、脚本及工作簿,不冒称QA亲自点击。复核脚本qa/support-independent-review.py不导入应用、不访问HTTP/DB;输出qa/support-independent-review.json含源证据SHA256。
两项补验实际结果¶
- QA106-RECEIPT-FIFO:Pass。三份真实public HTTP响应与服务内部FIFO数据分开核对。本期1060含税回款,剔税60、净基数1000;存量500/增量500,Task2/3各承接500,owner各0.5,预发40。无标记旧override900系数1.1,排除B后实时1000/600系数1,全部排除0/0、不可算毛利、系数1。13个finance模型33行在before/b-excluded/all-excluded/after-restoration完全一致,原回款及分摊投影不变。
- 实际16sheet工作簿已独立ZIP/XML提取47格,非仅containsMarker。
回款记录B9=1060、K9=1000、L9/M9=500、R9=40、AH9=1000、AI9=60;两位销售Q4 B8=530、E8=500、F8=0.5、G8/H8=20;毛利率计算基数A2:G2=2/2026/0/0/2/否/1。与cell dump及原始数据吻合。未分配USD100折700保持跳过,非合格已关联预付分支证明。 - QA106-TEAM-NUMERIC:Pass。实际9月team3/member2非空,Task2从低毛利列表移出、计数1→0;basis2000/600→0/0,excluded0→2,其他业绩、credit小时/完成率、成员、KPI不变。只有小样本,正亏损分支及3%取整阈值未触发,不冒称这两项数值边界通过。
原始证据统一在primary-support/round3/。首轮旧105Task1空duration引起原接口500,未修源码/旧记录;第二轮runner重复settings.configure问题未记作产品修复轮次。最终仅本轮Task2/3暂移同年9月隔离旧数据,结束恢复原2026-10-15T12:00:00及false标记。
恢复、范围及残余边界¶
- primary的guarded finally及results.json证明:PM2 teams_id/title/joining_time恢复原null,临时Team3已删,Task2/3日期/flag精确恢复;财务13模型33行未改。QA此轮只审恢复收据,未重新做线上profile/DB查询。
- 先前QA已恢复账号1/2的name_en=null、12个临时Permission与7个RolePermission,正常HTTP profile证明三账号active、原角色/权限恢复,见
cleanup-normal-profile-verification.json。此收据早于最后临时Team,二者证据职责分开。 - 合成17Task/9cost及金融fixture保留,manifest为唯一ID清单。无旧105/真实业务改写、无角色/密码修改、无全局FX写入、无外发审批/支付/通知、无新库、无破坏性迁移。
- 未独立实测:finance-only角色UI、真实会议专用入口、SimpleTasks精确投影、完整销售图表/导出入口、合格预付抵扣与复杂历史补结、3%取整阈值、精确日期微秒/月末闰日、共享Redis/多进程压力/保证锁竞争等,详见矩阵各行开发证据与未测处置。单轮双HTTP不等于压力验收。员工手册为发布后跟进,本轮真实截图可复用。
- noFurtherHTTPUI=true。不再操作浏览器/业务HTTP/DB,不自行退出Space53或停止Ops服务;会话、进程等环境清理由primary放行Ops处理。无额外health重复检查。
两仓均feature/issue-106-gross-margin-exclusion,只读核branch/status为Backend21项dirty、Web31项dirty,全部保留。QA本次只写coordinator报告/矩阵及Redmine;没有产品源码写入、分支切换、commit、push、部署或生产操作。
Redmine:最终逻辑批次写回#35并重读后,以qa/final-writeback-receipt.json记录journal;#36原347/348修复验证复用,不重复追加。
RA Updated by Redmine Admin 11 days ago
- Subtask #37 added
RA Updated by Redmine Admin 11 days ago
- File 01-quick-create-c.png 01-quick-create-c.png added
- File 04-project-exclude-b-40.png 04-project-exclude-b-40.png added
- File 06-km-excluded-b.png 06-km-excluded-b.png added
- File 07-quick-edit-b-flag.png 07-quick-edit-b-flag.png added
- File 08-incentive-neutral-factor1.png 08-incentive-neutral-factor1.png added
- File actual-results.json actual-results.json added
- File screenshots.json screenshots.json added
- File issue-106-staging-20261031.md issue-106-staging-20261031.md added
#106 测试站图文验收结果 — beta.2¶
本轮实际执行10项:9 Pass / 1 Fail / 0 Blocked / 0 Skipped。普通编辑finished/unpaid缺少保存入口,DEF106-02/Redmine #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及列表快编¶

图1:管理员20在测试站选择已有客户15、项目96、需求31、PM16/PA20及合成专家574245,勾“不计入毛利率”。唯一POST返回Task150,随后明确ongoing列表及精确detail独立GET核归属;收入null不进入A/B统计样本。

图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%,真实金额保留¶

图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¶

图4:#15是客户号,2026年度参与收入/成本0/0、排除Task数2、适用性“不适用(无有效基数)”、系数1,说明“排除后没有计算基数,系数按1”。这是A/B同时排除阶段截图;最终已把A恢复计入以保留40%复现场景。项目接口旧数值仍0,由独立applicable=false驱动页面“不适用”,不是假称真正0%毛利。
排除毛利统计不隐藏KM提醒¶

图5:仅取本轮Task149/项目96及表头,收入1000RMB、成本0、不计入毛利率。实际点刷新后一次GET200/code200仍返回该行,点击#149跳到确切详情;无其他业务记录写入。
普通编辑失败边界¶

图6:正确URL为/project_tasks/149/edit?project_id=96,图中**#96是项目号,行业主题task b对应Task149**。已结束/未付款任务的统计框未禁用,但标题仅返回/Card等,无保存/更新。没有发出普通编辑PUT,截图中其他必填背景空值不是无按钮的原因;primary/Web已确认header的非关键编辑模式判断漏finished/unpaid。已附#37附件122。不得以快编成功改成普通编辑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不自动关闭。
RA Updated by Redmine Admin 11 days ago
#106 beta.2 R1 final logical note — 2026-10-31¶
澄清journal351原句“未修改数据库”:本轮未执行直接DB写;通过授权正常API创建10个合成对象及标记更新,生产未动。
UI图文结构/截图可读性复核Pass,Backend业务事实校对Pass,无必须修改项。来源:outputs/issue-106-implementation-20261030/ui-staging-review.md 与 backend-staging-report-review.md;原报告docs/qa/frontend/issue-106-staging-20261031.md末尾仅补复核元数据和链接,已验图片/用例结果保持。
报告复核Pass不改变实际beta.2结果:仍9 Pass / 1 Fail,DEF106-02/#37未修复、未自动关闭。Web本地24项测试/build不等于测试站修复通过;本note没有新测试/新Pass,不复制10case或重传截图/附件,原journal351和#37附件122有效。
beta.3待人类决定及实际部署/定向复测,Space1/p1保留同目标;本次无浏览器、业务数据或服务探测操作。
RA Updated by Redmine Admin 10 days ago
- File independent-review.json independent-review.json added
- File actual-results.json actual-results.json added
- File 09-beta3-ordinary-margin-saved.png 09-beta3-ordinary-margin-saved.png added
- File issue-106-staging-20261031.md issue-106-staging-20261031.md added
DEF106-02 beta.3 定向修复验证 — 2026-11-01 Asia/Shanghai¶
仅staging tcrm/tcrm-api。FE2.16.9-beta.3/4a303c3d8a70805c31caaa629e94d7242733caf9;BE1.20.15b2/473cc345有效收据复用。primary真实UI执行,visible QA责任线程独立离线逐值核原始请求、完整前后Task/cost DTO和PNG;不是QA亲自点击,未重跑support或业务HTTP。
本轮实际1 Case Pass /0 Fail/0 Blocked/0 Skipped;复用beta.2有效9Pass(#35 journals351/352)。最新10个既有Case=10Pass/0Fail;四次保存不新增四Case,开发24与本地49不计此轮执行。原beta.2 9Pass/1Fail及#37/附件122原失败保留,ordinary previous链及actual-results-beta2-r1.json保存历史。
| Case/影响 | 前提、操作、预期 | 实际独立复核 | 状态 |
|---|---|---|---|
| QA106-STG-ORDINARY-EDIT / IMP106-01/11 / #37 | admin20 active、Space3/p1、原Task149 finished/unpaid无成本与148有cost42。普通编辑独立按钮双向保存flag;应仅1单flag PUT/次、无Cost写、不改其他字段、刷新保留 | 00:06:02–00:06:17执行B149 true→false→true、A148 false→true→false;每次PUT /v1/tasks/149或148,keys仅exclude_from_gross_margin,HTTP200/application-json/code200、0Cost写、guard恢复;每次80其他Task字段及完整cost DTO相等。reload checkbox值与目标布尔值一致。最终Afalse/Btrue,project96 .4、原收入2000/成本600 | Pass |
原始证据outputs/issue-106-implementation-20261030/qa/staging-20261031/primary-beta3-support/retry-locator-01/;QA逐文件hash/独立断言def106-02-beta3/independent-review.json。实际UTC2026-10-31 16:06=上海2026-11-01 00:06,路径RUN20261031保持稳定。新图09为primary采集/QA已目视;页头#96是项目号,Task149由intent URL/PUT/GET绑定。图示独立保存按钮/锁提示及原空字段,不补填metadata绕过。PNG原样复制SHA256 dfc597c01c15d097cc8715a392cac3c79284bafbd6076e696e6a8901c5725f10。
外层首次role checkbox无name定位器在动作前被Ego拒绝,count0/sent[]/guard恢复,GET149仍true;locator-correction.json后用观察到的唯一CSS checkbox,另目录完整执行四次。不是未知写重试,不计产品Fail。refreshPersisted字段是刷新后的勾选值,false步骤不代表刷新失败。
beta3仅独立flag handler/button、测试与版本metadata变化,BE/其他路径未变;ENV/CREATE/QUICK-CREATE/QUICK-EDIT/PAIR/NEUTRAL/KM/REFRESH/COST-SNAPSHOT 9项按原beta2候选/日期/角色复用。原六图与UI/Backend未变内容Pass复用,新图/增量报告待primary定向复核,不冒称已审。Ops版本/独有bundle/edit chunk+测试API证明本轮实际候选,没有本轮容器字节对比。其他角色/会议等原未测边界不升级。
图文docs/qa/frontend/issue-106-staging-20261031.md,唯一backend-impact-regression.md已追加对应范围;无产品source/config/环境/Git/生产操作,无新对象/账号/真实付款/审批/DB直写。QA noFurtherHTTPUI=true;Space3交primary最终finish。本次仅修复验证,不自动改变#35/#37 statusClosed。
RA Updated by Redmine Admin 10 days ago
- Subtask #38 added
RA Updated by Redmine Admin 10 days ago
- File actual-results.json actual-results.json added
- File independent-review.json independent-review.json added
- File screenshots.json screenshots.json added
- File issue-106-staging-20261031.md issue-106-staging-20261031.md added
- File 10-home-finance-70.png 10-home-finance-70.png added
- File 11-home-finance-40.png 11-home-finance-40.png added
- File 12-home-finance-empty.png 12-home-finance-empty.png added
- File 13-home-pm-october.png 13-home-pm-october.png added
- File 14-home-pm-rank30.png 14-home-pm-rank30.png added
- File 15-home-customer-october.png 15-home-customer-october.png added
- File 16-home-recruitment.png 16-home-recruitment.png added
- File 17-home-pm-reminders.png 17-home-pm-reminders.png added
#106 首页三角色统计图表补验 — 2026-11-01 R1¶
最新用户明确“先验现有三个角色,其余标明未测”。本轮只收口测试admin20/finance19/PM16,其他5身份及TL依赖场景不建不测、不等待授权。FE2.16.9-beta.3/4a303c3d + BE1.20.15b2/473cc345,环境仅tcrm/tcrm-api;QA在唯一新Space5正常BW密码UI登录,各profile200/code200 active/真实role,不让admin冒充finance,未改账号。旧10Case=10Pass保持原层级/日期,本轮不重算。
计划21Case:13 Pass /1 Fail /1 Blocked /6 Skipped;实际执行14项=13 Pass/1 Fail。全角色/所有图表完整覆盖未完成。 6Skipped来自最新用户决定(PA/sales/SU/guest/TL及其依赖团队场景),不是等待新授权;1Blocked为完整非空utility样本,已观察空态不作非空通过。
影响IMP106-03/04/05/08;唯一矩阵outputs/issue-106-implementation-20261030/backend-impact-regression.md已追加,原图文docs/qa/frontend/issue-106-staging-20261031.md顶部为本轮增量。每条操作/预期/层级/实际原始证据见附actual-results.json;独立同期间算式/ECharts运行series/完整DTO核对附independent-review.json。不是源码推算、mock或开发24项复用冒充亲测。
| CaseID | 状态 | 实际与边界 |
|---|---|---|
| QA106-HOME-AUTH-ADMIN | Pass | 正常BW登录/profile200/code200、active、id20/roleadmin;非admin冒充,未改账号。 |
| QA106-HOME-AUTH-FINANCE | Pass | 正常BW登录/profile200/code200、active、id19/rolefinance;非admin冒充,未改账号。 |
| QA106-HOME-AUTH-PM | Pass | 正常BW登录/profile200/code200、active、id16/rolepm;非admin冒充,未改账号。 |
| QA106-HOME-ADMIN-HOME | Pass | 本月新增专家0与dashboard一致;11月Call排名API空且UI有明确空态;7/30天切换请求200,合成专家574245访谈2次。未把11月空图说成非空验收。 |
| QA106-HOME-PM-HOME | Pass | PM16首页提醒4条含本Task149实际1000/0,虽排除仍保留;项目involve→take和任务user_id16+take请求200;7→30天真实切换,页面/响应排名一致。PM非TL不显示客户Call榜。 |
| QA106-HOME-FINANCE-HOME | Pass | finance19页面显示逾期0、出账0,两个实际API total_counts0;本月新增专家0。项目/任务工作台、提醒/专家榜和客户Call榜不显示。仅验证实际空态,未验证非空出账。 |
| QA106-HOME-ACCESS | Pass | 两种真实身份直达/admin均显示暂无可访问的数据中台内容;管理员可见7tab。此证据只证明UI权限边界,未执行越权写或全接口拒绝测试。 |
| QA106-HOME-FINANCE-CHART | Pass | 公司15年度实际2000/600,月度图10月2000/600/2小时、其余月0;B计入70%,排除40%,A/B全排除基数0/0页面不适用。7条ECharts运行series与真实响应逐项相等;原实际金额不变。 |
| QA106-HOME-PM-METRIC | Pass | 相同2026-05-01至11-01查询,PM16原收入2106/成本600保持,基数2106→1106,利润率独立算得71.51%→45.75%;其中106来自其他现有Task,不套项目70/40。另10月筛选也返回2106/600/45.75,截图标明该期间。 |
| QA106-HOME-SALES-CHART | Pass | 三个实际接口与ECharts收入/成本/毛利全部series数值对齐;公司15实际2000/600、70→40,10月聚合实际4106/600保持、85.39→80.68,分别按响应basis4106/600和3106/600算。管理员查看不替代sales身份权限;排除条数错误单列Fail。回款状态只观察表,未将其全量正确性计入此Pass。 |
| QA106-HOME-SALES-COUNT | Fail | 公司15双销售归属、仅Task149=true,销售company basis excluded_task_count=2,财务=1。金额/40%正确但排除数错误;源码每销售行赋1再累加。primary确认Backend唯一修复owner,尚未放行修复/部署。 |
| QA106-HOME-RECRUIT | Pass | 补齐原响应与截图:10月新增39/首次访谈4,11月0/0;表逐行与7月度响应核对。仅验证已显示统计,不点击专家明细或造专家数据。 |
| QA106-HOME-CUSTOMER | Pass | 11月空→10月实际总6小时,响应计数2+2+1+1+0=6,与图series逐点一致;本公司15为2小时。客户名称筛选请求含QA106,返回仅company15一行,10月client/billable均2,原A/B各1小时独立对照。未点导出。 |
| QA106-HOME-FLAG-INVARIANTS | Pass | 四次单字段TaskPUT200/code200、无成本写;同admin权限上下文完整其他Task字段与成本DTO相同,结束148false/149true并由PM只读确认。PM allowed_payment_transitions=[]与admin不同属角色能力,不是成本落库变化。未改金额/日期/归属/状态。 |
| QA106-HOME-ROLE-PA | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-ROLE-SALES | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-ROLE-SU | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-ROLE-GUEST | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-ROLE-TL | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-TEAM-LOW-LOSS | Skipped | 最新用户明确“先验现有三个角色,其余标明未测”:该身份及依赖团队场景本轮不执行;不建账号/团队/样本,不等待授权,不用admin代替。原前置缺口作为事实保留。 |
| QA106-HOME-UTIL-NONEMPTY | Blocked | 管理员已实际观察11月平均资费[]、Seat[]和相应空态,专家新增图本月0/上月PM16为2,运行series已保存;未闭合完整非空资费/Seat样本及逐图截图,不能以空图通过整个用例。PA数据表仅观察,不冒称真实PA身份已测。 |
关键实证:财务公司15实际2000/600/10月2h不变,B计入70%→排除40%→A/B全部排除基数0/0、不适用,再恢复;7条运行series与真实响应逐点一致。PM16同May01–Nov01查询实际2106/600保持,basis2106→1106/600,71.51→45.75;额外106现有收入未忽略,另10月筛选截图明确其期间。销售overview/companies/monthly三图数值对响应,公司15实际2000/600、70→40,月10实际4106/600、85.39→80.68;排除数错误独立Fail不掩盖。
DEF106-HOME-COUNT-01已建子缺陷#38并读回:公司15双销售、仅B149排除却count2,财务count1;services.py每销售行计1再累加,primary确认唯一owner=NDB Backend Agent;当前不放行修复/部署。金额与40%本身正确。没有自动关闭#35/#38或修改状态。
补齐专家招募真实响应+PNG:10月39/4、11月0/0;客户11月空→10月Call总6h,2+2+1+1+0=6;公司15独立名称筛选返回仅1行、10月client/billable各2h,上下两面板作用域分开。财务身份逾期/出账均0仅覆盖真实空态;PM/finance直达/admin无可访问tab,只证明UI边界,不替代全接口权限。PA表/平均资费/Seat/专家新增仅部分观察,非空/全角色未通过。操作监控、项目表所有动态分支、销售回款全状态、导出和全部筛选组合不在本轮Pass断言内。
证据目录outputs/issue-106-implementation-20261030/qa/home-roles-20261101/,原始method/path/query/HTTP/code、DTO、runtime series保留,认证材料仅BW内存不落盘。8张新图已QA目视,真实采集2026-11-01、PNG原样copy/hash见screenshots.json;新图/增量文案待primary安排UI/Backend定向复核,旧图/旧review复用,不提前声称新增内容已审。
本轮仅原Task148/149四次单flag PUT,0Cost写;同admin上下文其他完整字段/cost DTO相等、恢复148false/149true;PM最后GET allowed transitions为空是角色能力不同,非成本漂移。无日期/金额/状态/归属/账号修改,无新fixture/代码/config/DB直写/Git/部署/生产/付款/审批/通知。三角色范围按用户决定阶段交付,不继续请求五身份授权。Space5已正常登出、finish({keep:[]})成功一次,账号保持active、fixture保留。JSON/21条状态/8PNG hash/文档空白及两仓干净、diff --check核对通过。
RA Updated by Redmine Admin 10 days ago
DEF106-HOME-COUNT-01 / #38 第1轮本地独立QA — 2026-11-01¶
本地独立37 Pass /0 Fail /0 Blocked /0 Skipped;37=20项JSON视图+10项实际Excel响应+3项公司/月筛选+4项全计入/全排除。74份候选/baseline原始响应、每Case的操作/预期/实际/层级/影响/时间及原始值已附子缺陷#38本轮journal(case-index.json、execution-result.json、request-responses-r2-oracle-corrected.jsonl、results.md),不在两issue重复加总为74Case或重复上传同证据。
base473cc345、source digest af64e859e8b54281a24f74b56c2185372b86fdfe31c06c7fd953e052895ce818;services SHA fb02b2b896ae61032067205a94c17cabd8fdda3ee95c96861b53812ec1fefb79,tests SHA06758d048f77bf8ec1c49e3edae85c041ef28de0866fa440f663c262554c3cd7,执行前后均匹配。仅owner原services/tests两文件dirty,QA无source/config/Git/部署写。
真实Django URL/DRF APIClient/视图/ORM,SQLite内存临时库、禁历史迁移/项目.env读取/外网;force_authenticate仅临时admin,非密码登录/真实sales角色,也不是网络HTTP、PG或staging复测。双销售仅B排除旧公司count2与候选1同fixture复现;每销售overview各1、全排除count2不翻倍;多销售/重复归属/跨公司月/单销售/无匹配/空月与筛选覆盖。除排除数外完整响应相等,旧金额分摊/比例/基数不变。collection-status JSON/真实Excel及companies-export逐格保持;Excel无排除数字列,工作簿内存解析仅保留逐格原始值,不冒称独立xlsx文件。
首轮QA oracle误假设重复ID先归一化,执行首响应原金额即与baseline相同;只修oracle到既有重复ID权重,原execution.log/两响应及runner-correction保留。其后执行通过,不计产品Fail/第二修复轮,offline8/开发16也不与37相加。所有临时账号/角色/公司/项目/Task/Cost快照恢复一致,库finally销毁,无现有业务数据/账号/浏览器/服务操作。
原staging #35j356的13Pass/1Fail/1Blocked/6Skipped、旧10Pass以及#38 count2失败和全部真实截图保留,未部署站点仍原Fail,不自动Closed。其他角色按用户决定未测,不重跑旧14项。纯数值修复无测试发布前置;PG/迁移/网络/新页面/供应商/性能未测,AOCI既有静态工具阻断不当业务失败或新增治理。
原图文docs/qa/frontend/issue-106-staging-20261031.md仅顶部追加本地修复说明,未伪造新页面图;同backend-impact-regression.md追加独立结果。证据唯一目录outputs/issue-106-implementation-20261030/def106-home-count-01/qa/。交primary审核和后续决定,本轮不提交推送部署,不改生产。
RA Updated by Redmine Admin 9 days ago
- File qa-report.md qa-report.md added
- File results.json results.json added
- File final-request-counter.json final-request-counter.json added
- File dto-comparisons.json dto-comparisons.json added
- File flag-restoration-verification.json flag-restoration-verification.json added
- File catalog-restoration-readback.json catalog-restoration-readback.json added
- File visual-guide.md visual-guide.md added
- File 09-quick-confirm-viewport.png 09-quick-confirm-viewport.png added
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。
RA Updated by Redmine Admin 9 days ago
- File qa-final-review.md qa-final-review.md added
- File qa-final-review-receipt.json qa-final-review-receipt.json added
105+106 测试与生产发布:QA最终回执审查¶
2026-11-02 Asia/Shanghai。正确工单NDB #34(105)/#35(106),原可见QA责任聊天。唯一发布索引:outputs/issue-105-106-release-20261102/index.md;唯一生产总回执:production-release-receipt.json。Operations执行Git/CI/环境及实际运行,QA只审同一源证据,没有重新访问环境。
最终审查Pass:9项发布回执核对通过、0项失败,新增功能测试0项。所审证据支持105+106测试与生产发布及两仓Git收尾完成;不代表全角色或所有业务路径已验收。
实际发布与候选¶
| 目标 | 版本 / 候选 | CI及实际运行证据 |
|---|---|---|
| 测试BE | 1.20.17b0 / bd5a99c73bc6524efc5d252948a8afda4f499ada | 原7项测试回执审查复用,认证摘要/flag读取及本次精确会话撤销均已闭合 |
| 测试FE | 2.16.9-beta.4 / 3aadf8f4eadc64ed50d8d8f65b1cc08d0a4f0fdc | 已审preview冲突proposal精确应用;CI/公开版本/资源核对复用 |
| 正式BE | 1.20.17 / 52a00635480872694faf4b13c692a114104f87e2 | cnb-fpb-1k6dmuqt4 success;实际容器版本、34个打包源码hash及镜像digest匹配 |
| 正式FE | 2.16.9 / 1a756e16b128b84f9a6d89b32e567e9ca39e06d4 | cnb-119-1k6dn3m8v success;公开版本/生产API编译目标、主/登录/编辑资源与对应CI产物名匹配 |
用户已明确允许此次必要提交/整合/main-preview及精确tags推送、目标迁移/配置/部署、测试通过后立即生产的时间例外;Ops唯一writer。生产从main整合105/106来源,未合整个preview,未新建分支/worktree。
本逻辑轮次逐项审查¶
以下为发布回执检查,层级均为“QA独立审核已保存Ops原证据”,不是9个重新执行的功能案例。完整结构化记录和原证据指纹见qa-final-review-receipt.json。
| 编号 | 检查/预期 | 实际核对 | 状态/源证据 |
|---|---|---|---|
| REL105106-01 | 复用测试7项并闭合会话清理 | test-release-receipt认证读取字段已true;staging-summary-smoke合法admin读105摘要/list及106既有Task148/149匹配。精确会话字段清为NULL、撤销1条并读回,专用账号仍启用、仅认证会话写 | Pass;test-release-receipt、staging-summary-session-cleanup |
| REL105106-02 | BE tag/候选/CI/实际代码一致 | git/ci/artifact/runtime均52a00635及1.20.17;34个运行源码hash与准备文件集合精确相同,镜像digest相同。仅Docker明确排除的两分析元数据不作运行文件断言 | Pass;backend-production-{git,ci,ci-artifact-proof,runtime} |
| REL105106-03 | FE实际资源确为已审新确认候选 | git/runtime的5hash与已审proposal相同,含4冻结文件及适配测试;1a756e16及2.16.9跨源一致;公开资源HTTP200、资源名匹配精确CI清单、digest一致;生产API目标/新确认及未核实提示存在、旧独立保存提示缺席 | Pass;frontend-production-{git,ci,ci-artifact-proof,runtime},frontend-integration/qa-review-receipt |
| REL105106-04 | 两正式CI只走目标环境 | 两CI success,production alias/部署触发成功,staging部署阶段skipped;实际运行另有证据,不以触发成功代替部署完成 | Pass;两production-ci及artifact-proof |
| REL105106-05 | 105正式模板及精确配置生效 | 正式“NDB收款信息免填”,4控件必填、身份证号/手机号两项多选、Rex Linn固定审批、成员通知关闭,已查看保存后截图/规则快照。两键GUI精确读回,runtime=true/buildtime=false/literal=true;Compose仅五服务各两行引用、原文其他字节保留;server及4辅助服务实际值/镜像匹配 | Pass;formal-template-readback/controls/rule、production-105-env-save/env-flags/compose-structural-diff、production-auxiliary-runtime |
| REL105106-06 | 迁移/callback及生产最小只读路径 | 0018/0028、三表/bool列及历史一致,剩余迁移计划空;migrate退出0。callback路由、配置及解密/免填分流存在。生产只读事务+rollback中账户DTO/摘要、Task计数分区及有限毛利投影通过;无provider/callback调用或业务写 | Pass;backend-production-runtime、production-auxiliary-runtime |
| REL105106-07 | #38及main既有#39不丢失 | #38销售两文件运行hash与已验测试源相同。生产BE base为已发布#39 main27e28575,helper不在本次改动路径;finance整合回执记录已审FinancialStatistics解析逐字复用及class fingerprint,并绑定到实际views运行hash。未合整个preview;不因其他finance代码变化误要求整包重测 | Pass;backend-production-git/runtime、原#39集成QA及#38证据引用 |
| REL105106-08 | 两仓clean main=实时远端且准确tag已推 | Ops一次both检查passed、issues空;BE main/local/live remote/head均52a00635,FE均1a756e16;准确正式tag/main推送由对应git/CI回执关联 | Pass;production-main-closure、两production-git |
| REL105106-09 | 失败历史/授权边界/未测范围不被抹除 | buildtime/key标识API尝试成功但读回不符的历史保留,后GUI修正并API读回false;首次runtime误检查Docker排除分析文件失败保留,仅修验证范围后34运行文件通过。未发生产申请、模拟回调、付款、通知或造业务fixture;迁移/正式模板/配置为获准操作,不能说生产完全零写 | Pass;env-save/env-flags-readback、runtime-metadata-scope-failure、生产总回执 |
既有证据与未测边界¶
- 105本机31、测试5、真实“进入审批”及手册#34 journals337/338有效复用,数量不相加为本次新执行。用户明确“只要进审批就行”,真实企微批准/驳回回调仍未测且为原接受范围,不新发审批、不批准旧测试实例,也不把本地完整加密HTTP/PG回调提升为供应商真实E2E。
- 106原本地49及未变开发/测试证据、#38开发16/独立本地37、最新确认开发35/真实本机11Pass1Blocked及#35journal367继续按原环境层级复用。preview测试适配4组已审,不是新增业务实现;源/页面未变,不重跑。
- ROLE-BOUNDARY保持未验证:finance/PM/其他角色及真实只读关系不能因发布而转Pass;不声称全角色或完整#106所有路径通过。本次admin新确认正常/取消/有限故障注入等页面证据不覆盖所有异常/并发分支。
- 生产实际冒烟是只读服务层DTO/计数及有限投影,没有重新执行认证HTTP业务流程、生产页面flag往返、全量旧新金额对照或严格性能基准。FE依据实际公开版本/资源及CI绑定,未声称直接容器源文件逐字节查询。
- staging原1个认证读取缺口及随后session清理已闭合,原qa-staging-review的pending文字为阶段历史;本最终回执引用新增原始证据,不改写原执行历史。
员工手册:发布后跟进,不阻塞发布¶
| 项目 | 后续内容/负责人 | 可复用素材与边界 |
|---|---|---|
| 105 | QA补正式模板名称及Rex流程说明,UI视觉/Web或项目业务复核 | 复用既有docs/user-manual/frontend/issue-105-payment-exemption.md的真实测试图及已过review、当前Ops正式模板截图。明确测试截图来源;未实测的正式批准/回调步骤不能写成通过 |
| 106 | QA将确认交互指南并入正式员工手册,UI/Web只审必要增量 | 现成margin-confirm-ui/qa/visual-guide.md及01–05真实图、已过UI/Web review直接复用;09为确认前清晰补图。10/11截断图不作主展示。不重开空间、不生成mock或重复业务写来补图 |
本轮已记录跟进,尚未声称正式员工手册更新完成;不在发布窗口扩大文档/截图验收范围。
写回与实际执行边界¶
本轮仅读取协调目录既有源回执、截图及必要原出处,写本qa-final-review.md及receipt,并一次逻辑批次向正确NDB #34/#35追加本审查全文/附件、全文读回;保留旧Fail/Blocked,不自动关闭工单。
未重新登录、读取凭据、查询runtime/CI/容器/DB/企微、下载环境hash、运行旧案例或Git命令;未修改canonical或Ops源回执。源记录指纹、journalIDs、读回一致性与附件见qa-final-review-receipt.json。唯一发布索引仍由primary维护。