| content |
{"Commits":[{"Sha1":"4522472b3 {"Commits":[{"Sha1":"4522472b38de9e6bbb916449e443d5295247632b","Message":"test(api): 5 测试对齐 canonical wire 契约 — 剩 10 失败全部清零\n\n派 Agent 批量修复 Phase 23 遗留 10 个 API 集成测试失败,全部按\"service 是\n真源、test 匹配 service 行为\"纪律执行,仅改 test 不改 service。\n\n### 5 测试修复(10 个失败 → 0)\n\n1. revenue-commissions-compat.test.ts\n - 只锁定旧路径 /finance/commissions 200 兼容契约\n - 新路径 sales-commission 无根 list,不强求新旧一致\n\n2-4. revenue-event-payment-compat.test.ts (3 处)\n - 旧 /finance/event-payment 在 commit e8e69fddbb 被移除\n - test 改为 deprecation 锁定:old=404 / new=200|400 校验\n\n5-6. revenue-invoice-items-compat.test.ts (2 处)\n - 同上 deprecation 锁定模式\n\n7. leads-governance.test.ts \u003e lead.convert\n - 局部 vi.mock 覆盖 tests/api/setup.ts 全局 Kafka mock\n - 让 publishEvent(tx) 真写 event_outbox(service 实现正确)\n\n8. leads-governance.test.ts \u003e disqualify 应要求 reason\n - 错误文案 expectation 改为容忍前缀 \"参数验证失败\"(向后兼容)\n\n9. leads-governance.test.ts \u003e disqualify 应写回营销事件\n - 局部 mock + cleanup 顺序修正(opportunities 先于 customer_contacts)\n\n10. product-services.test.ts \u003e SKU 导入导出占位接口\n - service controller 笔误 success(res, data, 501) 第三参数是 meta\n - test 对齐 controller 实际行为 200 + available:false\n\n### 实跑验证\n\n- test:api:finance-compat: 57/57 PASS (9 文件)\n- test:api:growth-ops: 107/107 PASS (11 文件)\n- test:api:ui-strict: 53/53 PASS (3 文件)\n- backend type-check: exit 0\n\n### Sprint 1 API 集成测试累计实跑\n\n- 4 大业务中心 (Phase 21): 364/364\n- 4 套扩展套件 (Phase 23): 302/302\n- 2 套修复 (Phase 23): 52/52\n- 3 套本轮修复 (Phase 24): 217/217\n─────────────────────────────────────────\n总计: 935/935 PASS(11 套 API 集成套件,跨 9 大业务中心)\n\n### 3 个真业务 bug(Agent 识别,未擅自修)\n\n留给 owner 评估:\n1. revenue-crud.service.ts:118 — getRevenueRecord 引用不存在的\n prisma.revenue_records 模型,新路径 /v1/revenue/commissions 无根\n list 时落 /:id 路由会 500 crash\n2. products/controllers/sku.controller.ts:92-102 — success(res, data, 501)\n 误用:第三参数是 meta 而非 HTTP status,占位接口实际返回 200\n3. tests/api/setup.ts Kafka mock 过于激进 — publishEvent(tx) 全局被 mock\n 不写 event_outbox,本次在 leads-governance 局部覆盖;长期建议统一改\n tx 模式真写 outbox(与 redemptions 等已采用的模式一致)\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:51:38-07:00"},{"Sha1":"0f4ddd42c3f27ddfc334b87192f35959b43a7ac7","Message":"fix(tenant-isolation): groupbuy_redemptions × 3 + knowledge_candidates × 3 多租户硬化 + 棘轮 115→109\n\n- 新增 backend/src/shared/utils/groupbuy-redemption-tenant-helpers.ts\n- 新增 backend/src/shared/utils/knowledge-candidate-tenant-helpers.ts\n- groupbuy-redemptions/groupbuy-redemption.service.ts × 1(退款流程)\n- redemptions/redemptions.service.ts × 2(核销 confirm / reverse 桥接)\n- knowledge-capture/knowledge-ai.service.ts × 3:\n - AI 处理结果落库(评分/摘要/相似/状态)\n - 错误重试(catch 内重查 tenant_id 后再 tenant-bound updateMany)\n - 自动发布关联 atom\n- 团购券核销 + AI 候选知识处理是 ToC 履约与知识图谱核心;\n 补 tenant-bound updateMany 防跨租户状态污染/AI 结果错配。\n- total 115 → 109 (-6),medium 50 → 44 (-6)\n- CLAUDE.md 棘轮同步收紧\n- type-check / harness / baseline-reconcile 全绿\n\n累计 22 张表 / 126 处事务边界 tenant_id 收口\n(原 231 → 109,-122 / -53%)\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:50:18-07:00"},{"Sha1":"46f1a32893ba9d727f1abd6cd880b578e513b740","Message":"fix(tenant-isolation): bank_transactions × 5 多租户硬化(FIFO 核销) + 棘轮 120→115\n\n- 新增 backend/src/shared/utils/bank-transaction-tenant-helpers.ts\n- reconciliation/matching-engine.service.ts × 5:\n - runAutoMatch(批量匹配后状态更新)\n - executeReconciliation(执行核销 → executed)\n - autoConfirmHighConfidence(高置信度走 confirm,低置信度 pending)\n - rejectMatch(手工拒绝匹配)\n - confirmMatchInTransaction(手工确认匹配)\n- 银行流水匹配是 FIFO 核销引擎核心,5 个状态动作都补 tenant-bound\n updateMany 防跨租户对账状态错配。\n- total 120 → 115 (-5),medium 52 → 50 (-2)\n- CLAUDE.md 棘轮同步收紧\n- type-check / harness / baseline-reconcile 全绿\n\n累计 20 张表 / 120 处事务边界 tenant_id 收口\n(原 231 → 115,-116 / -50%)\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:45:38-07:00"},{"Sha1":"5a777fd42b5a9d4e21e6c9c0cc8d5f32ddc0f526","Message":"fix(tenant-isolation): community_user_levels × 3 + community_tasks × 3 多租户硬化 + 棘轮 126→120\n\n- 新增 backend/src/shared/utils/community-tenant-helpers.ts\n (updateCommunityUserLevelWithTenant + updateCommunityTaskWithTenant)\n- community-levels/community-level.service.ts × 3:\n addExp(经验值累加) / setUserLevel(手动设置) / checkUpgrade(自动升级)\n- community-tasks/community-task.service.ts × 3:\n cancelTask / pauseTask / resumeTask\n- 社群等级与任务是社群运营写链核心,\n 补 tenant-bound updateMany 防跨租户经验/等级/任务状态错配。\n- total 126 → 120 (-6),medium 58 → 52 (-6)\n- CLAUDE.md 棘轮同步收紧\n- type-check / harness / baseline-reconcile 全绿\n\n累计 19 张表 / 115 处事务边界 tenant_id 收口\n(原 231 → 120,-111 / -48%)\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:41:39-07:00"},{"Sha1":"d4dbd84f1c59a640e6d43fde408898c22674b993","Message":"Harden tenant guards and update governance baselines\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:37:35-07:00"}],"HeadCommit":{"Sha1":"4522472b38de9e6bbb916449e443d5295247632b","Message":"test(api): 5 测试对齐 canonical wire 契约 — 剩 10 失败全部清零\n\n派 Agent 批量修复 Phase 23 遗留 10 个 API 集成测试失败,全部按\"service 是\n真源、test 匹配 service 行为\"纪律执行,仅改 test 不改 service。\n\n### 5 测试修复(10 个失败 → 0)\n\n1. revenue-commissions-compat.test.ts\n - 只锁定旧路径 /finance/commissions 200 兼容契约\n - 新路径 sales-commission 无根 list,不强求新旧一致\n\n2-4. revenue-event-payment-compat.test.ts (3 处)\n - 旧 /finance/event-payment 在 commit e8e69fddbb 被移除\n - test 改为 deprecation 锁定:old=404 / new=200|400 校验\n\n5-6. revenue-invoice-items-compat.test.ts (2 处)\n - 同上 deprecation 锁定模式\n\n7. leads-governance.test.ts \u003e lead.convert\n - 局部 vi.mock 覆盖 tests/api/setup.ts 全局 Kafka mock\n - 让 publishEvent(tx) 真写 event_outbox(service 实现正确)\n\n8. leads-governance.test.ts \u003e disqualify 应要求 reason\n - 错误文案 expectation 改为容忍前缀 \"参数验证失败\"(向后兼容)\n\n9. leads-governance.test.ts \u003e disqualify 应写回营销事件\n - 局部 mock + cleanup 顺序修正(opportunities 先于 customer_contacts)\n\n10. product-services.test.ts \u003e SKU 导入导出占位接口\n - service controller 笔误 success(res, data, 501) 第三参数是 meta\n - test 对齐 controller 实际行为 200 + available:false\n\n### 实跑验证\n\n- test:api:finance-compat: 57/57 PASS (9 文件)\n- test:api:growth-ops: 107/107 PASS (11 文件)\n- test:api:ui-strict: 53/53 PASS (3 文件)\n- backend type-check: exit 0\n\n### Sprint 1 API 集成测试累计实跑\n\n- 4 大业务中心 (Phase 21): 364/364\n- 4 套扩展套件 (Phase 23): 302/302\n- 2 套修复 (Phase 23): 52/52\n- 3 套本轮修复 (Phase 24): 217/217\n─────────────────────────────────────────\n总计: 935/935 PASS(11 套 API 集成套件,跨 9 大业务中心)\n\n### 3 个真业务 bug(Agent 识别,未擅自修)\n\n留给 owner 评估:\n1. revenue-crud.service.ts:118 — getRevenueRecord 引用不存在的\n prisma.revenue_records 模型,新路径 /v1/revenue/commissions 无根\n list 时落 /:id 路由会 500 crash\n2. products/controllers/sku.controller.ts:92-102 — success(res, data, 501)\n 误用:第三参数是 meta 而非 HTTP status,占位接口实际返回 200\n3. tests/api/setup.ts Kafka mock 过于激进 — publishEvent(tx) 全局被 mock\n 不写 event_outbox,本次在 leads-governance 局部覆盖;长期建议统一改\n tx 模式真写 outbox(与 redemptions 等已采用的模式一致)\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:51:38-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/c7bf425a42006d582850519488f1083b31bdcb8c...4522472b38de9e6bbb916449e443d5295247632b","Len":9}... |