QA验收 #39
openFIN-STAT-PERF|财务年统计接口性能修复与金额一致性QA
0%
Description
FIN-STAT-PERF 财务统计接口性能修复独立QA。用户已授权修改并独立QA,明确先不要部署。Backend基线f1aadbd,分支bugfix/finance-statistics-performance,候选为api/finance/views.py未提交差异及新增statistics.py、test_statistics_performance.py。范围POST /v1/finances/statistics,仅批量读取,月年统计金额、小时和毛利率应与原算法一致。已有开发自测13项通过;独立QA复用适用证据,补新旧真实候选对照、筛选和金额边界。共享索引docs/specs/backend/2026-11-02-finance-statistics-performance.md。无commit/push/PR/部署/生产写入授权。本记录仅跟踪本修复,不关联Issue106金额口径改动。
Files
RA Updated by Redmine Admin 9 days ago
- File qa-report.md qa-report.md added
- File qa-results.json qa-results.json added
- File comparisons.json comparisons.json added
FIN-STAT-PERF 独立QA R1:金额一致性与实际本地接口¶
记录时间:2026-11-02T10:21:01+08:00(Asia/Shanghai)。正确工单NDB #39;主线程01a18c3a-cafb-7ac0-a552-0ebc24ebc557。
结论¶
本轮独立 10 Pass / 0 Fail / 0 Blocked / 0 Skipped。19组旧/新真实本地HTTP对照,17组成功响应的字段集合、类型、值及月份顺序全部相同,包含annual_total;另外2组权限拒绝也一致。固定种子300条随机任务加边界夹具,最终333 Task/1126 Cost/9汇率;金额差异0。对象键顺序不作为JSON字段差异,列表月份顺序保留。
未发现本次候选的阻断实现问题。结论限定本批独立合成数据、SQLite及真实本地WSGI/API层;不是生产数据全量一致性证明或生产提速验收。原开发13项及Black/Ruff结果审核适用后复用,未运行其测试命令,不计本轮新执行。
候选与独立对照来源¶
- Backend分支bugfix/finance-statistics-performance;HEAD/基线f1aadbdf12ccdaab79fac748baa03ff06d99c380。候选是三文件未提交差异,QA未更改,前后均精确匹配放行SHA。
- 旧完整views源SHA256:f3e9027ffb1785eb6e5e0ae0b7a2f15b131b10981d78bb268be7d38fc8ee494e;原类及原舍入/毛利函数提取SHA256:43938a31035507448ba72061a04db5ecbbbd21415bd21b559c026e20ae024af0。使用git show f1aadbd:api/finance/views.py及AST精确source segment,并在QA进程编译原FinancialStatistics类,没有改写算法或采用开发test的legacy_monthly_statistics。
- 保留当前模块仅作为原类所需导入命名空间;旧类明确调用原tasks_income_to_rmb/task_costs_to_rmb,原round_money及calculate_gross_margin_rate也从基线提取执行。services.py、ProjectTasks模型、权限和finance URL文件各自基线/现文件hash相同,因而共享依赖有效不变。证据candidate-and-baseline.json。
| 候选文件 | QA前后SHA256 |
|---|---|
| api/finance/views.py | a60309943816d442a47cb40b2fdc68394824df1d29016e9be2320cb005ba3d33 |
| api/finance/statistics.py | 9ca03ae35295aa0353d2561e9da58dae0736f18d1c49741c13d12c2dea66d14a |
| api/finance/test_statistics_performance.py | 20fd8f9dff8781a6a0e5b44877c46cfa3687ff9b4e6e32b5d21099d9ca3e578e |
本地真实链与安全¶
先激活crm_backend,复用config.settings.isolated_blacklist_tests:原Env.read_env由该设置显式禁用,不加载仓库.env;仅将SQLite内存库改为本任务qa/qa-synthetic.sqlite3,以供WSGI线程访问。既有模型sync schema,不宣称跑过生产/PostgreSQL迁移。缓存/邮件为本地替代,socket只允许精确127.0.0.1临时HTTP端口、requests外连禁止;记录外连尝试0。
一个本任务WSGI服务使用正常产品URLconf,当前真实URL POST /v1/finances/statistics;仅在QA进程增加/qa-baseline/v1/finances/statistics路由指向原类。两端共用同一数据库、原JWT认证/权限/响应处理,无业务响应mock。3个临时finance/PA/Sales账号均纯合成@example.invalid,通过真实POST /v1/auth/login登录,JWT/随机密码只留内存及临时库,不写证据、不访问BW或真实员工账号。
共38次统计HTTP请求(19对)及3次合成登录;这是10个逻辑场景的支持请求,不另加41条Pass。每对前后财务五类完整行一致;登录和认证会更新本地合成用户审计,不夸称整个库严格零写。
逐项结果¶
| 编号/影响 | 场景与操作预期 | 实际 | 状态 | 证据(本QA目录) |
|---|---|---|---|---|
| FINQA-01-BOUNDARY / IMP-01 / REG-01 | 12月多币种/历史汇率与字段优先级:POST年2022至基线及当前真实HTTP;历史、当月、未来、软删汇率与默认回退,company_payment显式0/空/缺失、软删及null删除费用、四分类和小时优先均应保持完整响应一致 | {"months": 12, "allResponseFieldsIncludingAnnualTotalEqual": true, "cases": "history/future/deleted/missing rates; four expense categories; company_payment zero/empty/null; deleted/null-deleted/unknown costs; explicit hour priority"} | Pass | pair-boundary-12-months.json |
| FINQA-02-FILTERS / IMP-01 / REG-02 | 客户、年份、状态和专家应付范围:对年2023分别请求公司A/B及字符串0筛选;完成、未完成、跨年、普通零/负收入、合法专家应付零收入按原完整接口比较 | {"companyVariants": 3, "yearStatusAndPayableOnly": "same full baseline API; valid zero-income expert payable rows, nonfinished/zero/negative regular income filtered"} | Pass | pair-filters-1.json; pair-filters-2.json; pair-filters-0.json |
| FINQA-03-ROUNDING / IMP-01 / REG-01 | 小数临界、负费用、月年汇总:使用JSON公司支付0.005/0.015/-0.005/-1.005及多类费用;年2031完整API应与旧类逐字段相等,annual_total沿原月度四舍五入汇总 | {"allResponseFieldsIncludingAnnualTotalEqual": true, "paymentInfoPrecision": ["0.005", "0.015", "-0.005", "-1.005"], "monthlyThenAnnual": true} | Pass | pair-rounding.json |
| FINQA-04-RANDOM / IMP-01 / REG-01/02 | 固定种子300任务随机差分:seed20261102生成300任务/费用混合状态、币种和公司;对2026全量/公司A/B及2025/2027/2024共6组比较;含闰日和年界,差异应0 | {"seed": 20261102, "randomTasks": 300, "queryVariants": 6, "allResponseFieldsEqual": true, "includesLeapAndYearBoundaries": true} | Pass | random-input.json; pair-random-*.json |
| FINQA-05-ZERO-INCOME / IMP-01 / REG-01/02 | 零收入及负费用的毛利边界:年2032仅合法专家应付任务、company_payment=-7.005;完整响应应与旧类相等,收入0时毛利率保持0 | {"negativeExpense": "real credit/negative company payment included identically", "annualGrossMargin": 0} | Pass | pair-zero-income-negative-cost.json |
| FINQA-06-EMPTY / IMP-01 / REG-02 | 空年度响应:年2199无任务;七组月数组均12个零,annual_total全部原字段/类型/金额相等 | {"twelveMonthsAllFieldsZero": true, "annualTotalEqual": true} | Pass | pair-empty-year.json |
| FINQA-07-RATE-EDIT / IMP-01 / REG-01 | 请求内复用不变成跨请求缓存:仅更新本次合成USD2022-01汇率后再请求;结果须发生对应变化且立即与旧真实接口一致,不手动清缓存 | {"nextRequestSeesFixtureRateEdit": true, "matchesRealBaseline": true, "noCacheResetUsed": true} | Pass | pair-rate-edit-next-request.json |
| FINQA-08-QUERY-BOUND / IMP-02 / REG-03 | 实际HTTP统计数据SQL增长:比较小公司1条任务及随机大池中符合目标年/公司的任务子集;实际HTTP中财务数据SELECT保持至多3条,金额仍与旧类一致 | {"metrics": {"query-small-old": {"case": "query-small-old", "path": "/qa-baseline/v1/finances/statistics", "dataSQLCount": 18, "allSQLCount": 21, "elapsedSeconds": 0.014752833000000187, "onlyFinancialSelect": true}, "query-small-new": {"case": "query-small-new", "path": "/v1/finances/statistics", "dataSQLCount": 3, "allSQLCount": 6, "elapsedSeconds": 0.006790207999999964, "onlyFinancialSelect": true}, "query-large-old": {"case": "query-large-old", "path": "/qa-baseline/v1/finances/statistics", "dataSQLCount": 170, "allSQLCount": 173, "elapsedSeconds": 0.05354383400000007, "onlyFinancialSelect": true}, "query-large-new": {"case": "query-large-new", "path": "/v1/finances/statistics", "dataSQLCount": 3, "allSQLCount": 6, "elapsedSeconds": 0.00827650000000002, "onlyFinancialSelect": true}}, "notProductionBenchmark": true} | Pass | sql-observations.json; pair-query-small.json; pair-query-large.json |
| FINQA-09-PERMISSIONS / IMP-03 / REG-04/05 | 真实URL、正常登录与权限:独立本地合成finance/pa/sales账号经正常密码登录,不force_authenticate;两端都执行真实JWT认证;finance成功、PA403、匿名401,保留旧Sales允许规则 | {"financeAllowed": true, "paDenied": 403, "anonymousDenied": 401, "salesOriginalAllowancePreserved": true, "normalJWTAuthBothViews": true} | Pass | http-observations.json; pair-permission-pa.json; pair-permission-anonymous.json; pair-permission-sales.json |
| FINQA-10-READ-ONLY / IMP-03 / REG-04 | 统计接口财务副作用与隔离:每组旧/新HTTP前后对公司/项目/Task/Cost/汇率完整行比较;统计不得写财务,外连0,业务文件sha始终匹配 | {"oldNewHTTPPairs": 19, "financialFullRowsUnchangedEachPair": true, "normalAuthAuditOnlyOutsideFinancialTables": true, "externalAttempts": 0} | Pass | pair-*.json; cleanup.json; candidate-and-baseline.json |
覆盖审查与有效证据复用¶
唯一影响/回归索引是协调根docs/specs/backend/2026-11-02-finance-statistics-performance.md,由主线程单写,QA未改。下述是该表的证据归属说明,不新增另一套业务矩阵。
- IMP-01 / REG-01、02:独立原完整接口对照涵盖12月、多币种、历史/未来/删除/缺失汇率,company_payment数值/字符串0与空/缺失回退、费用软删/null-delete/未知分类,显式收费小时优先及客户/年份/状态/应付筛选、细小正负费用、零收入及逐月再年度汇总;300随机任务六变体补独立输入空间。
- IMP-02 / REG-03:实际HTTP中的统计数据SELECT,小公司1条任务旧18/新3;大随机池符合年度/客户的子集旧170/新3(并非300条全部命中筛选),各完整API金额仍一致。含认证的总SQL旧21/173、新6/6。仅本地SQLite应用参考,不能把本地耗时推成生产SQL计划/时延。开发1/241任务3查询与纯RMB2查询仅复用原层级,不重复跑。
- IMP-03 / REG-04:仅FinancialStatistics接入新helper、年度汇总留原逻辑;共享services/模型/URL/IsFinanceUser字节不变,其他调用同共享函数的入口保持原实现;源码检索确认views移除的两个旧import无剩余消费者。未执行真实付款/开票/激励等无关写流程。独立权限与财务完整行不变覆盖相邻只读边界,原3项FinancialStatisticsViewTests在开发13项中有效复用。
- REG-05:已补本地真实HTTP的实际URL、正常密码/JWT登录、年度/客户请求与完整金额;未搭或操作未改Web页面,不宣称真实首页/图表交互通过。上级已明确重点为金额、不强制另搭前端,Web请求体/响应消费者仅源码核对。PostgreSQL执行计划/生产大规模内存/真实并发及生产58秒问题修复效果未测,仍由主线程在后续获准阶段处理。
- 权限文案提醒:IsFinanceUser原规则允许finance/admin/su/pm/sales,并非所有非finance都拒绝。本批finance200、PA403、匿名401、Sales200与原类一致;索引“非财务403”应限定为无原财务统计许可的角色,不能泛化为Sales/PM也应被拒绝。此为原权限语义澄清,不是本次产品缺陷。
- 复用审核:原开发13项/Black/Ruff来源见唯一索引“环境与结果”,同基线、同三文件候选/同offline settings;QA前后hash匹配且未改业务源,因此不因换责任线程重跑。QA不是复制这些用例,新增的是旧原类HTTP对照及独立输入/实际正常认证链。
准备错误与保全¶
一次QA准备错误保留于attempt-01-preparation:费用generator误用amount键,模型拒绝;在WSGI/正式API场景之前退出,0 Pass/0业务Fail。finally已清理仅QA SQLite,业务文件不变。仅修QA字段映射actual_price及离线自检,随后执行尚未开始的正式验收;未重放已有通过结果。support-corrections.md完整说明。
临时WSGI已shutdown/server_close、线程结束;仅本任务SQLite及journal/WAL文件已移除。所有临时账号、角色、fixture随仅QA库删除;不是停用共享专用账号。没有共享服务/测试业务库、生产数据库、真实员工账号或其他任务(包括Issue106)数据接触。候选三文件前后不变、Git status仍仅原三项、diff --check通过。
只写outputs/finance-statistics-performance-20261102/qa;主线程索引未写、产品代码未写,无切分支/worktree/commit/push/PR/部署/生产操作。完整响应比较与SQL/隔离/清理收据分别见comparisons.json、sql-observations.json、http-environment.json、cleanup.json。
Redmine¶
本次10条独立QA结果由任务主线程复核原始响应后,作为一次逻辑批次追加NDB #39;不关闭工单或其他issue。回写读回由任务主线程保存到coordinator/writeback-receipt.json。本地QA通过不代表获准部署,用户“先不要部署”保持有效。
RA Updated by Redmine Admin 9 days ago
- File qa-report.md qa-report.md added
- File results.json results.json added
- File comparisons.json comparisons.json added
- File summary.json summary.json added
- File cleanup.json cleanup.json added
FIN-STAT-PERF #39:preview冲突集成定向QA¶
执行:2026-11-02 Asia/Shanghai,原可见QA责任聊天;仅本包,未恢复其他历史任务。
结论:本轮实际6 Pass / 0 Fail / 0 Blocked / 0 Skipped,12组完整响应一致。未发现此次冲突解决丢失preview毛利排除规则的阻断问题。
候选、范围和复用¶
- Backend canonical根:
/Users/gexiaowei/Documents/work/mindsetech/ndb/projects/ndb/backend;detached HEAD473cc345,工作区resolved views仍为Git UU,两个新增文件A。QA未git add/continue或改产品源码;由Operations后续处理Git/部署。 - 比较基线:精确
git show 473cc345:api/finance/views.py提取原FinancialStatistics、round_money及calculate_gross_margin_rate,不使用f1aadbd基线或开发oracle。旧类原调用services绑定到逐字未变的真实模块。 - resolved views SHA256:
e9abc5674833bd7c5d9051a5ba4f310a3db152be2608fe97cfaf1b8b6dcb5b44。 - helper SHA256:
9ca03ae35295aa0353d2561e9da58dae0736f18d1c49741c13d12c2dea66d14a;与原验收helper相同。测试文件SHA256:20fd8f9dff8781a6a0e5b44877c46cfa3687ff9b4e6e32b5d21099d9ca3e578e。 - 对resolved类从
from api.projects.gross_margin import basis, tasks_basis起至返回的完整块做原文比较,包含monthly_bases、margin_basis与annual_total,和preview逐字相同。services.py、gross_margin.py亦与preview字节相同。 - 影响:共享主索引
docs/specs/backend/2026-11-02-finance-statistics-performance.mdIMP-01/REG-01、REG-02,统计接口POST /v1/finances/statistics/ Web Dashboard调用:相邻冲突可能丢失排除与月年舍入,故只补本轮差异。 - 复用原QA10项/19对(#39 journal364,附件199–201)及开发13项有效证据,不重跑、不计本轮新执行数。Black/Ruff与主任务解析检查复用,不重复格式工具。无HTTP/JWT链代码变化,沿用其原层级;本轮不宣称HTTP重新验收。
环境与独立断言¶
激活crm_backend,采用config.settings.isolated_blacklist_tests,不读取原.env;独立内存SQLite、locmem缓存;socket及requests外连禁止。preview新增mcp_access应用在QA进程内加入MIGRATION_MODULES=None,与既有隔离配置一致,模型同步建表,不是迁移验证。无共享DB、服务或真实账号。
差分层级为真实ORM + DRF view/APIRequestFactory(使用合成finance身份force_authenticate),不是HTTP服务、正常登录复测、测试部署、前端或生产验证。既有两条回归走原APIClient路由。每个差分场景独立6个Task、24个四类费用、2公司2项目,USD汇率0.5;合成数据在事务及内存库内销毁。
每场景分别查询全部/公司A/公司B,共12对;严格比较JSON渲染后的完整信封、所有月度12元素数组、annual_total及gross_margin_basis。逐对比较财务五模型完整行,确认仅统计读取不改财务行;外连尝试0。
| 编号 | 影响/操作及预期 | 实际 | 状态 | 证据 |
|---|---|---|---|---|
| FININT-01 | IMP-01/REG-01,02;无排除,全部及A/B分别查询,完整响应与preview一致,排除0 | 3对一致,月度和annual_total一致,排除0 | Pass | comparisons.json scenario none-excluded |
| FININT-02 | 同接口;部分排除,两公司各排除1条,保留真实金额、仅改变毛利basis | 3对一致;全部排除数2,A/B各1,财务行不变 | Pass | comparisons.json scenario partial-excluded |
| FININT-03 | 同接口;全部排除,原收入费用仍在,毛利basis不适用且收入成本0 | 3对一致;全部排除数6,A/B各3,basis applicable=false、income/cost为0 | Pass | comparisons.json scenario all-excluded |
| FININT-04 | 同接口;1、2、12月,USD半分边界及四类成本,逐月再年度舍入,一条排除与公司筛选 | 3对一致;年度真实收入100.05,与月度求和一致;排除数全部1/A1/B0 | Pass | comparisons.json scenario monthly-annual-rounding |
| FININT-05 | 指定既有test_financial_totals_remain_real_while_margin_changes;真实金额保留,毛利排除生效 | APIClient:收入2000/费用600、毛利40%、basis收入1000 | Pass | attempt-02-execution.log / results.json |
| FININT-06 | 指定既有test_finance_keeps_monthly_rounding_with_and_without_flag;排除前后真实金额不变,毛利按月舍入 | APIClient:年度真实收入0.02,basis从0.02到0.01,毛利0,monthly finance_data不变 | Pass | attempt-02-execution.log / results.json |
QA准备纠正与历史保留¶
第一次建表在任何case前遇mcp_access迁移依赖缺口,记录preparation-error.json;仅进程内隔离配置修正,无产品修改。随后两条既有测试通过,4个差分场景因QA旧类namespace缺少旧services函数绑定而未取得比较响应,保存attempt-02-results.json、attempt-02-execution.log及attempt-02-summary.json,未当成产品失败。
补齐真实旧函数绑定,并确认services/gross_margin源码与preview一致后,仅续测4个尚未完成的差分场景,最终通过。两条已有Pass未重跑。原错误不覆盖,最终results.json保留6条最新有效结果。此为QA支持问题恢复,不是产品修复轮次。
边界与收尾¶
- 本轮关闭此次冲突的规则保留风险,不把原10项与本轮6项重复相加为完整新一轮。
- PostgreSQL计划/迁移、部署制品、测试站运行、生产规模性能/内存并发及真实页面未在本轮验证,由Operations按已获授权的发布链继续;不推断已部署或生产通过。
- 内存SQLite及连接已销毁,外连0,三业务文件执行前后hash相同,Git仍A/A/UU。未写共享主索引、源码、配置、共享/生产DB,无Git写/提交/推送/部署;本轮仅本qa-staging-integration目录及#39增量写回。
- 原#39 journal364不覆盖;本轮追加一次并全文读回,收据见writeback-receipt.json。
RA Updated by Redmine Admin 9 days ago
- File qa-report.md qa-report.md added
- File review-results.json review-results.json added
- File source-evidence-hashes.json source-evidence-hashes.json added
FIN-STAT-PERF #39:发布回执独立审查¶
2026-11-02,原可见QA责任聊天。仅审Operations同一源回执,不重新操作环境。
结论:8项发布回执核对通过,0项失败/阻塞;本轮新增功能测试0项。所审证据支持本次Backend测试与生产发布及Git收尾完成。 不将回执核对计成8个新的业务功能Pass,不宣称生产登录HTTP全链或全量金额对照通过。
来源与复用边界¶
唯一源:outputs/finance-statistics-performance-20261102/release/index.md指向的runtime-receipt.json及对应分阶段原文件;组合回执与各分文件逐项相同。文件指纹已记录于本目录source-evidence-hashes.json,审查前后所读源文件未变。
原开发13项、独立QA10项/19对(#39 journal364,附件199–201)、preview冲突集成6项/12对(journal365,附件202–206)全部复用;不重跑业务、登录、HTTP、CI、容器、浏览器或Git命令。不访问凭据、共享/生产环境,不重抓版本或财务数据。
Operations为唯一Git/发布writer,用户已授权此次提交、必要集成、测试通过后立即生产的时间例外。QA本轮仅新增本目录及#39审查journal,未写共享主索引、Ops回执、源码、配置或Git。
逐项回执审查¶
所有条目的层级均为“已保存发布源证据独立审查”;执行人/实际环境操作均来自Operations,QA未重复执行。
| 编号 | 检查及预期 | 所审实际证据 | 结论 |
|---|---|---|---|
| RELREV-01 | 精确已验收候选进入对应环境,不能把preview规则带进生产 | source-commit记录源e81ebd74;生产三源码hash与原QA候选相同,views为a6030994…;测试三hash与冲突集成QA相同,views为e9abc567…;两者helper均9ca03ae3…且测试源码20fd8f9d…未变。生产源e81ebd74经main merge40cb5aa,再版本提交27e28575 | Pass |
| RELREV-02 | 测试CI路由、tag、候选和实际版本相互匹配 | v1.20.16b0/a01ef6cef602cedc81d74094012da69ec8627200;CNB cnb-58i-1k6d4d33r success,测试镜像推送/alias/部署触发成功,production路由skipped;staging-runtime实测版本与三hash匹配,镜像digest存在 | Pass |
| RELREV-03 | 测试真实登录/统计HTTP及仅本次会话清理 | 专用test finance正常登录/JWT后POST /v1/finances/statistics,2026、HTTP200、七数组各12项有限值、年度及preview毛利basis存在,单次0.3023s;无fixture。仅本次精确会话token对应字段清除1条,账号仍启用。普通登录审计写入与会话清理不等于业务财务写入 | Pass |
| RELREV-04 | 生产CI、tag、候选和运行源码正确,未合preview | v1.20.16/27e28575fbecd13c238e6f6f46c71312e8a6766b;CNB cnb-85p-1k6d4khs4 success,production推送/alias/部署触发成功,staging路由skipped;production-runtime实测1.20.16与三源码hash一致,镜像digest存在;production-git明确previewMerged=false | Pass |
| RELREV-05 | 首次失败不隐藏,最终版本及权限结果闭环 | production-public-initial-failure保留首次公开版本502,未重触部署;核对新容器后仅补公开失败项,最终版本200/1.20.16、匿名统计401。production-service-preparation-failure保留外层JSON/Python布尔解析NameError,在docker/真实计算前退出;后续仅执行尚未开始的服务层调用 | Pass |
| RELREV-06 | 生产必要统计路径在只读保护下运行,结论不越层 | 真实生产settings/ORM,PG SET TRANSACTION READ ONLY及SHOW校验,statement_timeout12s/lock_timeout3s,2026服务方法code200,七数组各12项有限数值、月年汇总及原毛利函数一致;单次0.6292s,事务回滚。无fixture/业务写、无金额或个人信息输出、无旧慢算法;明确非认证HTTP调用 | Pass |
| RELREV-07 | Git main干净且与实时remote一致,tags匹配,既有preview受保护 | Ops一次check_release_main passed、issues为空;当前main/local_main/实时remote_main/head均27e28575;远端v1.20.16b0及v1.20.16解引用分别匹配a01ef6ce与27e28575。local preview仍feb6204c3c923100921efe811256d3bffa81b3eb,与源提交前保留ref相同;Ops索引确认其两条#106销售提交未推,生产未合preview且原三源码hash不变。QA仅审该回执,不另行重建提交图 | Pass |
| RELREV-08 | 唯一源回执与组成文件一致,历史和未测边界不覆盖 | staging及production各git/ci/runtime/smoke、session/public/service与组合回执逐项相同,Git收尾/tag/ref亦相同;未重跑功能套件、无新增迁移/备份。staging-integration原冲突现场false标记保留为历史,最终resolved状态、集成提交b1daeaa7及a01ef6ce、journal365表明定向QA后继续;不把历史快照误当发布未完成 | Pass |
性能与未验证项¶
- 测试0.3023s为一次真实登录后统计HTTP请求的Operations观察;生产0.6292s为一次服务层计算。二者环境/调用层级不同,不能相互比较或声称“生产登录HTTP从60秒降至0.63秒”。
- 原金额不变证明来自本地隔离SQLite真实HTTP旧新对照;本轮生产仅核新统计结构、年度内部一致及原毛利函数,不是生产全量旧新金额一致,不运行旧60秒算法。
- 生产真实登录JWT统计HTTP全链、旧新全量金额对照、严格前后性能基准仍未测;专用测试凭据未用于生产。Web浏览器展示、生产规模内存/并发、PG执行计划也未测。沿用主任务本次已明确的发布顺序及仅服务层只读核验授权,不扩大到其他环境动作。
- 上述边界不改写原功能Pass,也不制造新的功能Skipped。后续发现具体新变化或失败由主任务决定差异包,QA不自行部署修复。
记录与收尾¶
本轮结构化审查记录:review-results.json;原始源指纹:source-evidence-hashes.json。Redmine仅向NDB #39追加一次发布回执审查,保留journal364/365,全文读回及附件收据见writeback-receipt.json。Ops源receipt中的QA pending为本次审查前快照,QA不编辑该源文件,由主任务在唯一索引关联此结论。