完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)

汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。
统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。
纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。

关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。
预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。
完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
这个提交包含在:
2026-09-19 13:11:04 +08:00
父节点 729d90576f
当前提交 1f8d5b658a
共修改 367 个文件,包含 21079 行新增和 12287 行删除
@@ -0,0 +1,80 @@
{
"id": "budget-pool-concurrency",
"name": "budget-pool-concurrency",
"title": "预算池占用与释放并发一致性修复",
"description": "预算并发本地修复及独立审查完成;两项必修经Claude定向928项验证通过并关闭。发布完整门禁延期,任务保留in_progress,未提交部署。",
"status": "in_progress",
"dev_type": "backend",
"scope": "budget-control",
"package": null,
"priority": "P1",
"creator": "shunli",
"assignee": "shunli",
"createdAt": "2026-09-19",
"completedAt": null,
"branch": null,
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [
"server/src/services/budgetPool.js",
"server/src/services/purchaseBudget.js",
"server/src/services/travelPayments.js",
"server/src/services/feeControl.js",
"server/src/routes/reimbursements.js",
"server/src/routes/purchaseRequests.js",
"server/src/routes/travelRequests.js",
"server/src/routes/travelTransactions.js",
"scripts/qa/test-budget-pool-db.cjs"
],
"notes": "",
"meta": {
"planningSource": "user-provided independent review and request to address three related paths together",
"implementationApproval": "APPROVED_BY_USER_20260919",
"findingId": "BUDGET-LOST-UPDATE-01",
"discoveryStatus": "CONFIRMED_STATIC",
"discoverySeverity": "P1",
"discoveryCommit": "b1d25d3c9939c0020e7b4f75868cd97c35c16ba8",
"remediationStatus": "LOCAL_VERIFIED_INDEPENDENT_REVIEWED",
"deploymentStatus": "NOT_DEPLOYED",
"externalVerificationStatus": "NOT_TESTED",
"report": "artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt",
"reportSha256": "b48e5f53340e139e5a97b5fdcb6d7003881a80a8a08d4004d01aaa6a759d2d0b",
"evidence": "artifacts/qa-governance/budget-pool-concurrency-20260919",
"coordinatorTask": ".trellis/tasks/09-06-release-gate-integrity",
"independentReview": "PASS_SCOPED_BUDGET_PATCH",
"deploymentAuthorized": false,
"travelReactivationAuthorized": false,
"targetedPostgresPassed": 28,
"targetedUnitPassed": 526,
"fullCandidate": "INTERRUPTED_NOT_PASS",
"deploymentEligible": false,
"backendFilesPassed": 225,
"backendTestsPassed": 4446,
"backendOriginalConditionalSkip": 1,
"browser": {
"passed": 29,
"interrupted": 4,
"notRun": 339,
"retriedCases": 0
},
"releaseFullGate": "DEFERRED_UNTIL_RELEASE_PREPARATION",
"reviewReport": "artifacts/qa-governance/budget-pool-claude-review-20260919T043257Z.txt",
"reviewFixEvidence": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919",
"reviewFixTests": "CLAUDE_PASSED_2_FILES_928_TESTS_NO_SKIPS",
"reviewFixFiles": [
"server/src/routes/travelRequests.js",
"server/tests/unit/routes/travel-request.errors.test.js",
"server/tests/unit/fixtures/error-reason-messages.json",
"server/tests/unit/scripts/error-reason-client.test.js"
],
"findingResolution": "RESOLVED_LOCAL_NOT_DEPLOYED",
"reviewFixResult": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919/claude-result-20260919T044304Z.md",
"reviewFixResultSha256": "cb7996f6dcacc3ffd44a398b705ed840bf51ed6a0e312336933a25f93813a8f9",
"requiredReviewFindingsOpen": 0
}
}