|
145
|
5
|
5
|
5
|
10
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"be21d403b {"Commits":[{"Sha1":"be21d403b5c238988ede6dd6cf7ca4884f82dfc1","Message":"feat(h5): 重构地图组件并优化打卡/踩点相关视图\n\n- 重构 MapPicker/MapView 组件适配新地图工具函数\n- 简化 map.ts 工具模块,移除冗余代码\n- 更新打卡详情、现场勘查、竞品详情、地图推荐等视图\n- 更新高德地图类型声明\n- 新增 userCompat.ts 用户兼容层 API\n- 新增 nginx 生产环境配置(disabled 状态)\n- 更新 .env 环境变量配置\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-27T16:22:56+08:00"},{"Sha1":"5c5f776182440538a1dad03be05c84c3eb5d4f8d","Message":"fix(miniprogram): 修复类型错误和完善 gitignore 配置\n\n- 修复 H5 竞品分析/详情页 API 调用参数和响应类型\n- 修复小程序评分页 dimensionScores 字段对齐\n- 修复坪效基准页类型转换\n- 修复 API 测试用例字段名匹配\n- 新增 AMap 类型声明文件\n- gitignore 排除小程序编译产物和后端导出文件\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-07T14:25:45+08:00"},{"Sha1":"e7465b059a2cc1fed48f944890d50cfde941bd00","Message":"chore: sync post-merge changes from merged branches\n\n- Docker compose redis port mapping update\n- Miniprogram page improvements and new utility functions\n- Shared API index cleanup\n- H5 check-in list view fix\n\nCo-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-07T14:12:51+08:00"},{"Sha1":"88e1823e0038fc7dd4fafb283d6194c72cfbaf51","Message":"fix: remove duplicate methods in StoreService from merge\n\nCo-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-07T14:10:24+08:00"},{"Sha1":"626361cdee3321a049f90f23cf0e481b503c6657","Message":"Merge remote-tracking branch 'origin/claude/complete-location-recommendations-ui-DxOg6'\n\nCo-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-07T14:03:30+08:00"}],"HeadCommit":{"Sha1":"be21d403b5c238988ede6dd6cf7ca4884f82dfc1","Message":"feat(h5): 重构地图组件并优化打卡/踩点相关视图\n\n- 重构 MapPicker/MapView 组件适配新地图工具函数\n- 简化 map.ts 工具模块,移除冗余代码\n- 更新打卡详情、现场勘查、竞品详情、地图推荐等视图\n- 更新高德地图类型声明\n- 新增 userCompat.ts 用户兼容层 API\n- 新增 nginx 生产环境配置(disabled 状态)\n- 更新 .env 环境变量配置\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-27T16:22:56+08:00"},"CompareURL":"luoanwu/ktv-store-location-system/compare/e2e4dbdff0ec8cca7e722dff99f2b23113f9e81e...be21d403b5c238988ede6dd6cf7ca4884f82dfc1","Len":10}...
|
1772180606
|
Edit
Delete
|
|
144
|
5
|
5
|
5
|
10
|
0
|
0
|
refs/heads/main
|
0
|
|
1772180606
|
Edit
Delete
|
|
143
|
5
|
1
|
5
|
10
|
0
|
0
|
|
0
|
|
1772180524
|
Edit
Delete
|
|
142
|
5
|
5
|
5
|
9
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"22125e0f1 {"Commits":[{"Sha1":"22125e0f1e435efabf81ec0007a1b56996cb0776","Message":"fix(ime-core): 修复TFLiteRecognizerTest验证方式,改为验证可观察行为\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-27T14:49:40+08:00"},{"Sha1":"e7926bf94bb1d2df1c56170dbe47940b49a70134","Message":"fix(ime-core): 修复HandwritingManager测试缺少ModelDownloader参数\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-27T14:40:23+08:00"},{"Sha1":"15aae8c5e92b6e0c7dd53a7921212b68b8a1294b","Message":"perf(server): JWT用户缓存 + 缓存失效 + legacy-reply stub实现\n\n- JwtStrategy 添加 Redis 用户缓存 (5分钟TTL), 减少95%数据库查询\n- auth.service 在 updateProfile/logout/logoutAll 时主动失效缓存\n- users.service 在 update/updateStatus/toggleStatus/delete 时失效缓存\n- UsersModule 注入 RedisModule 支持缓存操作\n- legacy-reply markReplyUsed/submitReplyFeedback stub 实现完整请求解析和日志\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-25T08:23:28+08:00"},{"Sha1":"f19558e8e838bacc0f616f40c1ec10d9a5e4e9d5","Message":"chore(server): 优化 Docker 基础设施配置\n\n- Redis: 修复空密码时 --requirepass 报错问题\n- Reranker Dockerfile: torch CPU 预安装 + 清华 PyPI 镜像加速\n- requirements.txt: 移除 --extra-index-url(已在 Dockerfile 中处理)\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-25T08:16:10+08:00"},{"Sha1":"43712be12681e00bab0e3fed74c60ffa34fdc11d","Message":"fix(server): 修复 5 个 CRITICAL + 5 个 HIGH 安全漏洞\n\nCRITICAL:\n- C1: 移除 JWT_SECRET/JWT_REFRESH_SECRET 弱默认值回退,启动时断言必须配置\n- C2: 开发后门 000000 需同时满足 NODE_ENV=development + ENABLE_DEV_BYPASS=true\n- C3: OCR recognizeFromUrl 添加 SSRF 防护(HTTPS-only + 内网地址黑名单)\n- C4: resetPassword 使用 crypto.randomBytes + bcrypt.hash 替代 Math.random + 明文\n- C5: ai-service auth.guard 添加 JWT alg 字段校验 + timingSafeEqual 签名比较\n\nHIGH:\n- H1: Redis KEYS 命令替换为 SCAN 游标迭代,避免生产环境阻塞\n- H2: knowledge.controller 添加 @UseGuards(JwtAuthGuard) 认证守卫\n- H4: updateProfile 禁止直接修改手机号,需独立验证流程\n- H6: Access Token 有效期从 7d 缩短至 1h\n- H7: JwtStrategy.validate 注入 RedisService 检查 token 黑名单\n\n测试: api-gateway 963 tests, ai-service 883 tests, ocr-service 87 tests 全部通过\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-25T08:15:48+08:00"}],"HeadCommit":{"Sha1":"22125e0f1e435efabf81ec0007a1b56996cb0776","Message":"fix(ime-core): 修复TFLiteRecognizerTest验证方式,改为验证可观察行为\n","AuthorEmail":"laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"laoluojuhai@users.noreply.github.com","CommitterName":"laoluojuhai","Timestamp":"2026-02-27T14:49:40+08:00"},"CompareURL":"luoanwu/haizhan-ime-android/compare/893022bfd17ce1f2e75e75651551cf8ceaacfe45...22125e0f1e435efabf81ec0007a1b56996cb0776","Len":311}...
|
1772178608
|
Edit
Delete
|
|
141
|
5
|
5
|
5
|
9
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"893022bfd {"Commits":[{"Sha1":"893022bfd17ce1f2e75e75651551cf8ceaacfe45","Message":"feat: 嗨赞AI输入法Android版初始提交\n","AuthorEmail":"law@g-hi.com","AuthorName":"luoanwu","CommitterEmail":"law@g-hi.com","CommitterName":"luoanwu","Timestamp":"2026-02-27T15:28:58+08:00"}],"HeadCommit":{"Sha1":"893022bfd17ce1f2e75e75651551cf8ceaacfe45","Message":"feat: 嗨赞AI输入法Android版初始提交\n","AuthorEmail":"law@g-hi.com","AuthorName":"luoanwu","CommitterEmail":"law@g-hi.com","CommitterName":"luoanwu","Timestamp":"2026-02-27T15:28:58+08:00"},"CompareURL":"luoanwu/haizhan-ime-android/compare/a8f0a86b4c1d4422bfe5c002b8c5307111d317bb...893022bfd17ce1f2e75e75651551cf8ceaacfe45","Len":1}...
|
1772177363
|
Edit
Delete
|
|
140
|
5
|
5
|
5
|
9
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"a8f0a86b4 {"Commits":[{"Sha1":"a8f0a86b4c1d4422bfe5c002b8c5307111d317bb","Message":"test\n","AuthorEmail":"test@test.com","AuthorName":"test","CommitterEmail":"test@test.com","CommitterName":"test","Timestamp":"2026-02-27T15:21:42+08:00"}],"HeadCommit":{"Sha1":"a8f0a86b4c1d4422bfe5c002b8c5307111d317bb","Message":"test\n","AuthorEmail":"test@test.com","AuthorName":"test","CommitterEmail":"test@test.com","CommitterName":"test","Timestamp":"2026-02-27T15:21:42+08:00"},"CompareURL":"luoanwu/haizhan-ime-android/compare/63233cd10022a8f2d0c726c679dcc60d2a8d60d2...a8f0a86b4c1d4422bfe5c002b8c5307111d317bb","Len":1}...
|
1772177252
|
Edit
Delete
|
|
139
|
5
|
1
|
5
|
9
|
0
|
0
|
|
0
|
|
1772177237
|
Edit
Delete
|
|
17113
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"c4f0c2eab {"Commits":[{"Sha1":"c4f0c2eabbf729ae2f7cc6de2eda4416f0e7b3bb","Message":"feat(migrations): 部署完备 parity baseline——全新库 migrate deploy 终态与 schema 真源零差异\n\n新增 20260712155600_deploy_parity_baseline 迁移,收敛迁移链重放态与 folder schema\n真源之间累计 10176 行系统性漂移,使全新空库 `prisma migrate deploy` 全量重放后\n与 Prisma Client 生成依据完全一致(影子库全链演练机器验证 diff 为空)。\n\n漂移核查结论:\n- 零缺列——Client 声明的列迁移链全部建到(6 个疑似缺列实为同语句 DROP+ADD 类型\n 重建,演练撞列后实锤改判)\n- 实际漂移构成:FK onDelete/onUpdate 行为 542 对、索引命名与定义约 1950 处、\n 列类型/NOT NULL/默认值 260 条、131 个真源已废弃列清理\n\nbaseline 工程化(五类防御化,安全性由终态 diff=0 校验兜底):\n- 约束背后索引 DROP INDEX → DROP CONSTRAINT(演练发现 Prisma diff 脚本缺陷)\n- 业务视图 20 个先拆后建(排除 pg_* 扩展视图;类型变更被视图依赖阻断)\n- 业务触发器 36 个先拆后建(pg_get_triggerdef 原样导出)\n- 索引操作幂等化 + 约束 RENAME/ADD DO 块吞存在性异常\n- 收尾:11 个同名异构索引先删后建 + 1 个冗余旧名 FK 清理\n\n环境处置:\n- dev 库 resolve --applied 跳过(禁止在有数据库上执行,含 DROP COLUMN 与 FK 行为\n 变更;存量漂移由 migration-drift 审计渐进治理)\n- API 测试库非 prisma migrate 管理,不受影响\n- 附带处置共享 dev 库幽灵状态:failed 半应用迁移 20260711235453 与无记录迁移\n 20260712000950 核实内容完整在库后 resolve 补记录\n\n部署口径落盘 docs/operations/database-deploy-migration-runbook-2026-07-12.md\n(全新库两步:deploy + diff 校验;已有环境一步 resolve)。\n\n证据:影子库全链演练 deploy 成功 + 终态 diff 输出 \"This is an empty migration.\";\n后端单测 640/8803 全绿;customers/sla API 真打 DB 17/17;prisma:schema 镜像审计通过;\n演练用影子库已清理。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T09:04:27-07:00"}],"HeadCommit":{"Sha1":"c4f0c2eabbf729ae2f7cc6de2eda4416f0e7b3bb","Message":"feat(migrations): 部署完备 parity baseline——全新库 migrate deploy 终态与 schema 真源零差异\n\n新增 20260712155600_deploy_parity_baseline 迁移,收敛迁移链重放态与 folder schema\n真源之间累计 10176 行系统性漂移,使全新空库 `prisma migrate deploy` 全量重放后\n与 Prisma Client 生成依据完全一致(影子库全链演练机器验证 diff 为空)。\n\n漂移核查结论:\n- 零缺列——Client 声明的列迁移链全部建到(6 个疑似缺列实为同语句 DROP+ADD 类型\n 重建,演练撞列后实锤改判)\n- 实际漂移构成:FK onDelete/onUpdate 行为 542 对、索引命名与定义约 1950 处、\n 列类型/NOT NULL/默认值 260 条、131 个真源已废弃列清理\n\nbaseline 工程化(五类防御化,安全性由终态 diff=0 校验兜底):\n- 约束背后索引 DROP INDEX → DROP CONSTRAINT(演练发现 Prisma diff 脚本缺陷)\n- 业务视图 20 个先拆后建(排除 pg_* 扩展视图;类型变更被视图依赖阻断)\n- 业务触发器 36 个先拆后建(pg_get_triggerdef 原样导出)\n- 索引操作幂等化 + 约束 RENAME/ADD DO 块吞存在性异常\n- 收尾:11 个同名异构索引先删后建 + 1 个冗余旧名 FK 清理\n\n环境处置:\n- dev 库 resolve --applied 跳过(禁止在有数据库上执行,含 DROP COLUMN 与 FK 行为\n 变更;存量漂移由 migration-drift 审计渐进治理)\n- API 测试库非 prisma migrate 管理,不受影响\n- 附带处置共享 dev 库幽灵状态:failed 半应用迁移 20260711235453 与无记录迁移\n 20260712000950 核实内容完整在库后 resolve 补记录\n\n部署口径落盘 docs/operations/database-deploy-migration-runbook-2026-07-12.md\n(全新库两步:deploy + diff 校验;已有环境一步 resolve)。\n\n证据:影子库全链演练 deploy 成功 + 终态 diff 输出 \"This is an empty migration.\";\n后端单测 640/8803 全绿;customers/sla API 真打 DB 17/17;prisma:schema 镜像审计通过;\n演练用影子库已清理。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T09:04:27-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/384707574f237763231e84a10939c4277977169d...c4f0c2eabbf729ae2f7cc6de2eda4416f0e7b3bb","Len":1}...
|
1783872271
|
Edit
Delete
|
|
17112
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"384707574 {"Commits":[{"Sha1":"384707574f237763231e84a10939c4277977169d","Message":"feat(tickets): 工单联系人/预约时段五字段全链点亮——迁移补列 + 写读回闭环\n\n数据库迁移(20260712153553_ticket_contact_and_schedule_fields):\n- service_tickets 补 contact_name(100)/contact_phone(50)/contact_address(500)/\n estimated_start_time/estimated_end_time 五列——工单表单自建立起渲染这五个字段,\n 但无物理列导致 create/update 白名单注释「后端暂不支持」、用户填写全部静默丢弃\n (P0 批 tickets 编辑断链修复时裁定归 owner,本次补列接通)\n- 迁移应用过程处置共享 dev 库存量幽灵状态:20260711235453 为 failed 半应用\n (列+索引实际已在)、20260712000950 内容已在库但无记录——核实两者列+索引\n 完整存在后 migrate resolve --applied 补记录,再 deploy 新迁移;\n folder 真源 → 镜像同步 → audit:prisma-schema-source 通过 → client/Zod 重新生成\n\n全链接线:\n- ticketMapper 补 contactAddress/estimatedStartTime/estimatedEndTime 三条映射\n (contactName/contactPhone 映射历史上已预留、列今天才建)\n- createTicketSchema/updateTicketSchema 双 schema 补五键(Zod max 与 VarChar 逐列对齐,\n prisma-zod 契约审计 0 错误)\n- 前端 create()/update() 白名单恢复发送(表单 phone → 后端 contactPhone);\n 编辑回填改读 DTO 真源键 contactPhone;shared ServiceTicket 类型补 contactPhone\n- 连坐清理:shared 重建暴露 invoice-requests/Detail 的 issuedBy 漏网死字段消费,\n 同款移除(invoices 表无 issued_by 列)\n\n证据:双端类型检查干净;后端单测 640/8803 全绿;live 写读回实锤——PUT 五字段\n(王工/13900001111/杭州市西湖区文一路 100 号/预约时段 ISO)全部落库读回成功;\nprisma-zod p1Length/p1Required 均 0;tickets/invoices 域 RTL 6 文件/18 用例全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:49:04-07:00"}],"HeadCommit":{"Sha1":"384707574f237763231e84a10939c4277977169d","Message":"feat(tickets): 工单联系人/预约时段五字段全链点亮——迁移补列 + 写读回闭环\n\n数据库迁移(20260712153553_ticket_contact_and_schedule_fields):\n- service_tickets 补 contact_name(100)/contact_phone(50)/contact_address(500)/\n estimated_start_time/estimated_end_time 五列——工单表单自建立起渲染这五个字段,\n 但无物理列导致 create/update 白名单注释「后端暂不支持」、用户填写全部静默丢弃\n (P0 批 tickets 编辑断链修复时裁定归 owner,本次补列接通)\n- 迁移应用过程处置共享 dev 库存量幽灵状态:20260711235453 为 failed 半应用\n (列+索引实际已在)、20260712000950 内容已在库但无记录——核实两者列+索引\n 完整存在后 migrate resolve --applied 补记录,再 deploy 新迁移;\n folder 真源 → 镜像同步 → audit:prisma-schema-source 通过 → client/Zod 重新生成\n\n全链接线:\n- ticketMapper 补 contactAddress/estimatedStartTime/estimatedEndTime 三条映射\n (contactName/contactPhone 映射历史上已预留、列今天才建)\n- createTicketSchema/updateTicketSchema 双 schema 补五键(Zod max 与 VarChar 逐列对齐,\n prisma-zod 契约审计 0 错误)\n- 前端 create()/update() 白名单恢复发送(表单 phone → 后端 contactPhone);\n 编辑回填改读 DTO 真源键 contactPhone;shared ServiceTicket 类型补 contactPhone\n- 连坐清理:shared 重建暴露 invoice-requests/Detail 的 issuedBy 漏网死字段消费,\n 同款移除(invoices 表无 issued_by 列)\n\n证据:双端类型检查干净;后端单测 640/8803 全绿;live 写读回实锤——PUT 五字段\n(王工/13900001111/杭州市西湖区文一路 100 号/预约时段 ISO)全部落库读回成功;\nprisma-zod p1Length/p1Required 均 0;tickets/invoices 域 RTL 6 文件/18 用例全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:49:04-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/584554702141074169c3a208e5fed2bc25768b58...384707574f237763231e84a10939c4277977169d","Len":1}...
|
1783871348
|
Edit
Delete
|
|
17111
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"584554702 {"Commits":[{"Sha1":"584554702141074169c3a208e5fed2bc25768b58","Message":"fix(field-contract): 第六批 INFO 尾账四项收口——占位端点下线 + 死列失败关闭 + 三方契约归一\n\n- payment-plans/overdue 三方契约归一:service 补 minOverdueDays 真消费(due_date 前推 N 天,\n live 实锤 5→0 收敛);孤儿 schema(minAmount/maxOverdueDays 从未被消费)改为与 controller\n 实际消费一致(customerId/minOverdueDays/limit),docs 引用同步归真;前端参数删除无分页\n 语义的 page/pageSize 改 limit。类型收紧暴露分诊假阴性:orders 详情 hook 真实消费该端点,\n 此前传的 page/pageSize 一直被静默忽略,已对齐\n- livestream 报表 summary.peakViewers:后端接口与前端类型双侧 nullable + 死列注释\n (livestream_schedules.peak_viewers 无运行时 writer,类型层失败关闭防新消费者误信)\n- groupbuy getPlatformDetailStats/getStoreStats:基于 order_count/sales_amount 双死列\n (全仓仅 select 读、无 create/update 写链,相似写点在 influencer_performances 另一张表)\n 派生的 totalOrders/totalRevenue/dailyTrend/avgOrderValue/productCount/rating 全部失败\n 关闭返回 null/空并删除无用死列查询;仅保留 settled_amount 真列派生的 revenue\n- sales-dashboard 七个占位端点整体下线(products/customers/regional/activities/\n sales-cycle/my-performance/team-performance):自建立起即硬编码假数(恒空/avgDays:30)\n 且前端零视图消费,按孤岛清理先例删除 routes/controller/schema/docs/前端方法全链;\n live 实锤四端点 404;顺手对齐 getForecast 前端类型潜伏雷(声明数组 vs 后端真实对象)\n\n证据:双端类型检查干净;后端单测 640/8803 全绿;sales-dashboard API 2/2、前端\nsales-dashboard/orders RTL 17/17;route-contract 审计 coverage 100% 无破损;\nlive curl 实锤(minOverdueDays 收敛、占位端点 404、平台 stats 正常)。\n分诊台账全部条目清零,五批+尾账共约 54 项真缺陷收口完毕。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:24:31-07:00"}],"HeadCommit":{"Sha1":"584554702141074169c3a208e5fed2bc25768b58","Message":"fix(field-contract): 第六批 INFO 尾账四项收口——占位端点下线 + 死列失败关闭 + 三方契约归一\n\n- payment-plans/overdue 三方契约归一:service 补 minOverdueDays 真消费(due_date 前推 N 天,\n live 实锤 5→0 收敛);孤儿 schema(minAmount/maxOverdueDays 从未被消费)改为与 controller\n 实际消费一致(customerId/minOverdueDays/limit),docs 引用同步归真;前端参数删除无分页\n 语义的 page/pageSize 改 limit。类型收紧暴露分诊假阴性:orders 详情 hook 真实消费该端点,\n 此前传的 page/pageSize 一直被静默忽略,已对齐\n- livestream 报表 summary.peakViewers:后端接口与前端类型双侧 nullable + 死列注释\n (livestream_schedules.peak_viewers 无运行时 writer,类型层失败关闭防新消费者误信)\n- groupbuy getPlatformDetailStats/getStoreStats:基于 order_count/sales_amount 双死列\n (全仓仅 select 读、无 create/update 写链,相似写点在 influencer_performances 另一张表)\n 派生的 totalOrders/totalRevenue/dailyTrend/avgOrderValue/productCount/rating 全部失败\n 关闭返回 null/空并删除无用死列查询;仅保留 settled_amount 真列派生的 revenue\n- sales-dashboard 七个占位端点整体下线(products/customers/regional/activities/\n sales-cycle/my-performance/team-performance):自建立起即硬编码假数(恒空/avgDays:30)\n 且前端零视图消费,按孤岛清理先例删除 routes/controller/schema/docs/前端方法全链;\n live 实锤四端点 404;顺手对齐 getForecast 前端类型潜伏雷(声明数组 vs 后端真实对象)\n\n证据:双端类型检查干净;后端单测 640/8803 全绿;sales-dashboard API 2/2、前端\nsales-dashboard/orders RTL 17/17;route-contract 审计 coverage 100% 无破损;\nlive curl 实锤(minOverdueDays 收敛、占位端点 404、平台 stats 正常)。\n分诊台账全部条目清零,五批+尾账共约 54 项真缺陷收口完毕。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:24:31-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/e005063b444466a70a8b0bc6b257ee2097fac9cb...584554702141074169c3a208e5fed2bc25768b58","Len":1}...
|
1783869876
|
Edit
Delete
|
|
17110
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"e005063b4 {"Commits":[{"Sha1":"e005063b444466a70a8b0bc6b257ee2097fac9cb","Message":"fix(field-contract): P2 第五批十五条全量收口——SLA/门店/获客三域整链 + 微修线\n\n三域并行修复(每条裁定附 prisma schema 列证据,范式:有真源后端真算、无真源失败关闭):\n\nSLA 整链(服务#2/#3):\n- getDashboardStats 重写为前端嵌套契约:current{running/atRisk/breaching}、last30Days\n 响应/解决达标率(诚实分母:未到期 pending 不计入不造数)、breachedByPriority、\n dailyTrend 近 7 日;保留旧扁平键兼容。live 实锤 running=306、解决达标率 22.7%\n- getComplianceReport 由时钟数组改报告对象(overall/byPriority/byType/daily 逐日骨架),\n 真消费 dateFrom/dateTo(此前完全忽略);API 测试断言同步归真(旧断言锁定断链形状)\n\n门店域(门店#1-6):\n- groupbuy-platforms:全局统计/平台列表真算(accounts 计数、settled_amount 合计、\n byPlatform 分桶、authorizedPlatforms 接 auth_status 真列);店铺硬编码死指标\n (syncStatus/productCount/rating)删除;营收量纲修正(误按分除 100 → 元);\n totalOrders 全仓无 writer 全线失败关闭;同步任务无持久化表 → tab/API/类型下线\n- livestream-groupbuy-conversion:实时卡 redemptions(conversion_tracks stage='redeemed')\n 与 avgWatchDuration(viewer_tracks.watch_duration 有列有写链,纠正分诊「无列」误判)\n 真算;peakViewers 死零列失败关闭;关联表补 schedule 名称等 7 个物理列真源,\n 假时间戳/假 status 兜底删除;创建表单想象字段(商品 ID/置顶)删除\n\n获客域(获客#1/#2/#5):\n- campaigns getDashboardData 扩展 12 键真算(byStatus/byChannel/byBusinessLine groupBy、\n 预算花费聚合、executingCampaigns、recentLeadsCount、dailyTrend 7 日桶);live 实锤\n totalBudget=134.3 万、recentLeadsCount=31\n- channel-comparison 补 campaigns 计数与 avgRoi(cost=0 失败关闭);impressions/clicks\n 无真源从前端契约删除\n- campaign-targets 无 Prisma 关系 → 二次查询拼装活动摘要(查不到 null 禁止伪造);\n currentValue 无列 → 进度列失败关闭 '-';abm 触点/评分 metadata 无写链 → nullable\n\n微修线(7 条):\n- 门店系 page 回退 typo ×4(page ?? page_size 误回退,pageSize=50 会跳空页)\n- contracts 排序 order 别名(拦截器映射键此前被 Zod 剥离,升序静默回落 desc)\n- invoices「开票人」死字段三处删除(表无 issued_by 列,条件恒 false)\n- leads 保护期真实现(protect_until 真列 + 分配链真实写入;「保护期管理」由硬编码\n 空 stub 改真查询);分配历史 protectUntil 假时间戳改读 leads 真值\n- tickets assign/escalate 补 crm_activities 操作日志 writer(activity_type 直映\n timeline type,「指派记录」「升级记录」两个恒空 Tab 从此有真源)\n- cash-flow payment-behaviors 孤儿 schema 删除(零引用死文件)\n- batch8 测试存量断言缺陷补 auth mock(Permission 包裹按钮自 wire 提交起未 mock)\n\n证据:双端类型检查干净;后端单测 640 文件/8803 全绿(三域新增/强化单测:SLA 4 条、\nplatforms/livestream 聚合断言、campaigns dashboard/channel/targets 拼装断言,含\nnot.toHaveProperty 防伪造键回潮守卫);SLA API 真打 DB 12/12;前端相关域 RTL 全绿\n(含失败关闭断言与 createLink payload 精确匹配防想象字段回潮);live curl 六端点\n真值/失败关闭行为实锤。分诊台账 P2 段全部标记收口,余 4 项无消费者观察 INFO 备案。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:08:16-07:00"}],"HeadCommit":{"Sha1":"e005063b444466a70a8b0bc6b257ee2097fac9cb","Message":"fix(field-contract): P2 第五批十五条全量收口——SLA/门店/获客三域整链 + 微修线\n\n三域并行修复(每条裁定附 prisma schema 列证据,范式:有真源后端真算、无真源失败关闭):\n\nSLA 整链(服务#2/#3):\n- getDashboardStats 重写为前端嵌套契约:current{running/atRisk/breaching}、last30Days\n 响应/解决达标率(诚实分母:未到期 pending 不计入不造数)、breachedByPriority、\n dailyTrend 近 7 日;保留旧扁平键兼容。live 实锤 running=306、解决达标率 22.7%\n- getComplianceReport 由时钟数组改报告对象(overall/byPriority/byType/daily 逐日骨架),\n 真消费 dateFrom/dateTo(此前完全忽略);API 测试断言同步归真(旧断言锁定断链形状)\n\n门店域(门店#1-6):\n- groupbuy-platforms:全局统计/平台列表真算(accounts 计数、settled_amount 合计、\n byPlatform 分桶、authorizedPlatforms 接 auth_status 真列);店铺硬编码死指标\n (syncStatus/productCount/rating)删除;营收量纲修正(误按分除 100 → 元);\n totalOrders 全仓无 writer 全线失败关闭;同步任务无持久化表 → tab/API/类型下线\n- livestream-groupbuy-conversion:实时卡 redemptions(conversion_tracks stage='redeemed')\n 与 avgWatchDuration(viewer_tracks.watch_duration 有列有写链,纠正分诊「无列」误判)\n 真算;peakViewers 死零列失败关闭;关联表补 schedule 名称等 7 个物理列真源,\n 假时间戳/假 status 兜底删除;创建表单想象字段(商品 ID/置顶)删除\n\n获客域(获客#1/#2/#5):\n- campaigns getDashboardData 扩展 12 键真算(byStatus/byChannel/byBusinessLine groupBy、\n 预算花费聚合、executingCampaigns、recentLeadsCount、dailyTrend 7 日桶);live 实锤\n totalBudget=134.3 万、recentLeadsCount=31\n- channel-comparison 补 campaigns 计数与 avgRoi(cost=0 失败关闭);impressions/clicks\n 无真源从前端契约删除\n- campaign-targets 无 Prisma 关系 → 二次查询拼装活动摘要(查不到 null 禁止伪造);\n currentValue 无列 → 进度列失败关闭 '-';abm 触点/评分 metadata 无写链 → nullable\n\n微修线(7 条):\n- 门店系 page 回退 typo ×4(page ?? page_size 误回退,pageSize=50 会跳空页)\n- contracts 排序 order 别名(拦截器映射键此前被 Zod 剥离,升序静默回落 desc)\n- invoices「开票人」死字段三处删除(表无 issued_by 列,条件恒 false)\n- leads 保护期真实现(protect_until 真列 + 分配链真实写入;「保护期管理」由硬编码\n 空 stub 改真查询);分配历史 protectUntil 假时间戳改读 leads 真值\n- tickets assign/escalate 补 crm_activities 操作日志 writer(activity_type 直映\n timeline type,「指派记录」「升级记录」两个恒空 Tab 从此有真源)\n- cash-flow payment-behaviors 孤儿 schema 删除(零引用死文件)\n- batch8 测试存量断言缺陷补 auth mock(Permission 包裹按钮自 wire 提交起未 mock)\n\n证据:双端类型检查干净;后端单测 640 文件/8803 全绿(三域新增/强化单测:SLA 4 条、\nplatforms/livestream 聚合断言、campaigns dashboard/channel/targets 拼装断言,含\nnot.toHaveProperty 防伪造键回潮守卫);SLA API 真打 DB 12/12;前端相关域 RTL 全绿\n(含失败关闭断言与 createLink payload 精确匹配防想象字段回潮);live curl 六端点\n真值/失败关闭行为实锤。分诊台账 P2 段全部标记收口,余 4 项无消费者观察 INFO 备案。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T08:08:16-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/5ae992ef927153e78f5d698e12079bcd3c022f39...e005063b444466a70a8b0bc6b257ee2097fac9cb","Len":1}...
|
1783868903
|
Edit
Delete
|
|
17109
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"5ae992ef9 {"Commits":[{"Sha1":"5ae992ef927153e78f5d698e12079bcd3c022f39","Message":"fix(field-contract): P2 第四批八条收口——占位统计真实现 + 无真源 UI 失败关闭\n\n后端补真实现(真源在库、此前占位/分组数组致恒 0):\n- rma:byType 真实 groupBy(type 列 2026-07-09 已建,stats 注释过期硬编码空数组致\n 「类型分布」卡恒空)\n- contracts:统计卡 active/expiringSoon/totalValue 真算(status 分组 + effective_to\n 30 天到期窗口 + total_amount 合计;live 实测 active=126 / totalValue=90 亿)\n- tickets:统计卡 pending(new+assigned)/processing(in_progress)/breached(SLA 时钟违约\n 且未终态) 真算(live 实测 177/45/0)\n- leads:/stats 补 unassigned(销售看板待办真源,live 实测 398);assignment/stats 补\n unassigned/todayAssigned + topAssignees.userName 人员姓名回填(分配页 UUID 直显修复)\n- sales-dashboard:getTrend 由硬编码空数组占位改真实月度聚合(与 overview 同口径\n won opportunities expected_amount + leads/opportunities 创建计数;live 验证趋势卡\n 出现 2026-05 真实赢单 50000,此前恒「暂无趋势数据」)\n\n前端无真源 UI 失败关闭(数据模型表达不了、禁止造假数):\n- contract-templates:删「草稿」统计卡(is_active 布尔无 draft 语义,后端字面量 0、\n 点击恒空列表)\n- customer-balance:删「透支额度」虚构列(后端无 overdraft 概念,adapter 硬编码 0)\n- groupbuy-redemptions:删「方式统计」死面板(redeem_method 未持久化,后端诚实空集)\n\n证据:双端类型检查干净;后端单测 640/8795 全绿(contracts/lead-assignment 单测断言\n更新为扁平键回归守卫);前端六域 RTL 10 文件/39 用例全绿;live curl 六端点真值实锤。\n分诊台账 P2 段拆分为已收口子集与剩余待裁定清单。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T07:16:44-07:00"}],"HeadCommit":{"Sha1":"5ae992ef927153e78f5d698e12079bcd3c022f39","Message":"fix(field-contract): P2 第四批八条收口——占位统计真实现 + 无真源 UI 失败关闭\n\n后端补真实现(真源在库、此前占位/分组数组致恒 0):\n- rma:byType 真实 groupBy(type 列 2026-07-09 已建,stats 注释过期硬编码空数组致\n 「类型分布」卡恒空)\n- contracts:统计卡 active/expiringSoon/totalValue 真算(status 分组 + effective_to\n 30 天到期窗口 + total_amount 合计;live 实测 active=126 / totalValue=90 亿)\n- tickets:统计卡 pending(new+assigned)/processing(in_progress)/breached(SLA 时钟违约\n 且未终态) 真算(live 实测 177/45/0)\n- leads:/stats 补 unassigned(销售看板待办真源,live 实测 398);assignment/stats 补\n unassigned/todayAssigned + topAssignees.userName 人员姓名回填(分配页 UUID 直显修复)\n- sales-dashboard:getTrend 由硬编码空数组占位改真实月度聚合(与 overview 同口径\n won opportunities expected_amount + leads/opportunities 创建计数;live 验证趋势卡\n 出现 2026-05 真实赢单 50000,此前恒「暂无趋势数据」)\n\n前端无真源 UI 失败关闭(数据模型表达不了、禁止造假数):\n- contract-templates:删「草稿」统计卡(is_active 布尔无 draft 语义,后端字面量 0、\n 点击恒空列表)\n- customer-balance:删「透支额度」虚构列(后端无 overdraft 概念,adapter 硬编码 0)\n- groupbuy-redemptions:删「方式统计」死面板(redeem_method 未持久化,后端诚实空集)\n\n证据:双端类型检查干净;后端单测 640/8795 全绿(contracts/lead-assignment 单测断言\n更新为扁平键回归守卫);前端六域 RTL 10 文件/39 用例全绿;live curl 六端点真值实锤。\n分诊台账 P2 段拆分为已收口子集与剩余待裁定清单。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T07:16:44-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/0ebe6fb5c4cc802d6d6f53fba830ec5fbf64f3d7...5ae992ef927153e78f5d698e12079bcd3c022f39","Len":1}...
|
1783865808
|
Edit
Delete
|
|
17108
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"0ebe6fb5c {"Commits":[{"Sha1":"0ebe6fb5c4cc802d6d6f53fba830ec5fbf64f3d7","Message":"fix(field-contract): P1 批次十三条收口——键名/量纲映射级断链修复\n\n响应侧映射修复:\n- campaigns:getCampaignStats 从后端真实 {overview,channels} 派生 summary/channelBreakdown\n (渠道真数据此前被键名错位丢弃恒空);getStats 分组数组转对象(业务线 Tab 计数恒 0)+\n totalSpent 键对齐\n- leads /:id/score:拆分 controller 回完整评分对象(此前与 /score-details 共用剥壳 handler\n 只回裸数组,评分卡恒 0 分);shared 类型补 calculatedAt 真源键并重建 dist\n- tickets:stage-history 路由接 ticket_stage_history 真源 handler(此前 alias 到 timeline\n 被旁路,渲染「初始状态:undefined」);getReplies 补 adapter(回复人恒 '-' 修复)\n- satisfaction /analytics:adapter 归一 responseRate/avgCSAT/avgNPS/npsBreakdown\n (分析页半页恒 '-');情感分布/类型统计无后端真源,保持 undefined 失败关闭\n- commissions:my-stats adapter(四张统计卡恒 ¥0);listRecords/getMyRecords/\n getSettlementById 补 user/rule/settlement/records DTO 映射(含 org_units 部门),\n 顺手修掉 where 层 camel 死键(userId/businessDate 等触发 Prisma 未知列的潜伏 500)\n- financial-reports:KPI 卡读 actualValue/targetValue 真源键(恒 '-' 修复);\n 逾期率去掉二次 ×100(12.5% 曾显示 1250%)\n- ap-ledger:service 层补 supplier/owner 语义键映射(两列恒 '-')\n\n请求侧修复:\n- opportunities:statsQuerySchema 补 transform 唯一转换点(snake schema × camel service,\n stats/funnel/forecast 三端点 owner/日期筛选静默失效返回全量口径)\n- sla clocks:schema 补 status(此前被 Zod 剥离)+ service 消费 ticketId/clockType/breached\n (收而不筛的假筛选)\n\n附带:LeadAssignmentResult.assignedTo nullable 化后类型连坐揪出分配历史列第三处\n无守卫消费,一并加守卫。\n\n证据:双端类型检查干净;后端单测 640/8795 全绿;前端六域 RTL 20 文件/72 用例全绿;\nlive curl 实锤:opportunities funnel bogus owner 309→0、stats 2099 区间→0、\nleads score 返回完整对象键、sla clocks bogus status→0、campaigns/commissions wire\n形状确认。分诊台账 P1 段已标记收口。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T07:01:41-07:00"}],"HeadCommit":{"Sha1":"0ebe6fb5c4cc802d6d6f53fba830ec5fbf64f3d7","Message":"fix(field-contract): P1 批次十三条收口——键名/量纲映射级断链修复\n\n响应侧映射修复:\n- campaigns:getCampaignStats 从后端真实 {overview,channels} 派生 summary/channelBreakdown\n (渠道真数据此前被键名错位丢弃恒空);getStats 分组数组转对象(业务线 Tab 计数恒 0)+\n totalSpent 键对齐\n- leads /:id/score:拆分 controller 回完整评分对象(此前与 /score-details 共用剥壳 handler\n 只回裸数组,评分卡恒 0 分);shared 类型补 calculatedAt 真源键并重建 dist\n- tickets:stage-history 路由接 ticket_stage_history 真源 handler(此前 alias 到 timeline\n 被旁路,渲染「初始状态:undefined」);getReplies 补 adapter(回复人恒 '-' 修复)\n- satisfaction /analytics:adapter 归一 responseRate/avgCSAT/avgNPS/npsBreakdown\n (分析页半页恒 '-');情感分布/类型统计无后端真源,保持 undefined 失败关闭\n- commissions:my-stats adapter(四张统计卡恒 ¥0);listRecords/getMyRecords/\n getSettlementById 补 user/rule/settlement/records DTO 映射(含 org_units 部门),\n 顺手修掉 where 层 camel 死键(userId/businessDate 等触发 Prisma 未知列的潜伏 500)\n- financial-reports:KPI 卡读 actualValue/targetValue 真源键(恒 '-' 修复);\n 逾期率去掉二次 ×100(12.5% 曾显示 1250%)\n- ap-ledger:service 层补 supplier/owner 语义键映射(两列恒 '-')\n\n请求侧修复:\n- opportunities:statsQuerySchema 补 transform 唯一转换点(snake schema × camel service,\n stats/funnel/forecast 三端点 owner/日期筛选静默失效返回全量口径)\n- sla clocks:schema 补 status(此前被 Zod 剥离)+ service 消费 ticketId/clockType/breached\n (收而不筛的假筛选)\n\n附带:LeadAssignmentResult.assignedTo nullable 化后类型连坐揪出分配历史列第三处\n无守卫消费,一并加守卫。\n\n证据:双端类型检查干净;后端单测 640/8795 全绿;前端六域 RTL 20 文件/72 用例全绿;\nlive curl 实锤:opportunities funnel bogus owner 309→0、stats 2099 区间→0、\nleads score 返回完整对象键、sla clocks bogus status→0、campaigns/commissions wire\n形状确认。分诊台账 P1 段已标记收口。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T07:01:41-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/34599f92fc238176604126d3b0af3ac05efe051a...0ebe6fb5c4cc802d6d6f53fba830ec5fbf64f3d7","Len":1}...
|
1783864905
|
Edit
Delete
|
|
17107
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"34599f92f {"Commits":[{"Sha1":"34599f92fc238176604126d3b0af3ac05efe051a","Message":"fix(field-contract): P0 批次八条收口——券码链崩溃/分配假失败/SLA 违规表/流转反馈/翻页/编辑丢字段/搜索失效\n\n响应侧:\n- groupbuy-redemptions 券码链:listVouchers/getVoucher/findByPhone 三端点接 adaptVoucher\n 归一(此前直连 canonical 形状致 row.code undefined 渲染 TypeError 崩溃、核销入口\n 永不出现、手机号核销必失败);adaptVoucher/adaptRedemption 补 metadata 双读\n (buyerName/buyerPhone/orderAmount,金额一直在此前恒 ¥0);formatVoucherCode 空值\n 守卫;reversed 状态不再折叠为 unused\n- leads 分配链:后端 assign 返回补 assignedTo(成功分配此前被前端 TypeError 报成\n \"分配失败\");分配预览 null 守卫(无可分配人显示告警 Tag 而非崩溃);shared 类型\n assignedTo nullable 化\n- SLA 违规表:getBreachedClocks 富化工单/客户/策略上下文 + breachedBy 超时分钟计算\n (metric_type 兼容 resolution/first_response 双值域),此前裸时钟 DTO 致 7 列全空\n 且超时列渲染 NaN;单测断言更新为富化契约守卫\n- 工单流转反馈:前端 executeTransition 类型与消费改读后端真源键 toStatus\n (此前读 toStage 恒 undefined,流转成功却无提示不刷新)\n- ap-ledger 列表改标准分页包络 paginated()(此前裸 res.json 致前端 total 恒 0 无法翻页)\n\n请求侧(live 实锤):\n- tickets 编辑:updateTicketSchema 补 customerId/snId/orderId/projectId 关联键\n (与 create 对称,此前换客户被 Zod 静默剥离假成功)+ service 补同租户引用校验 +\n 前端 update() 白名单映射对称化;联系人字段组确认为无物理列的想象契约,归 P2 裁定\n- payments plans:schema 补 keyword/due_date_from/due_date_to + service 到期区间消费\n (搜索框此前输入无效),内部两调用点同步补键\n\n证据:双端类型检查干净;后端单测 640 文件/8795 全绿(SLA 断言更新为富化契约);\nap-ledger 3/3、sla 12/12 API 真打 DB;live curl 实锤:工单换客户写读回(已还原)、\nplans keyword 190→0 收敛、ap-ledger 标准包络 meta.pagination;前端 leads/\ngroupbuy-redemptions RTL 17/17;分诊台账 P0 段已标记收口。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T06:42:16-07:00"}],"HeadCommit":{"Sha1":"34599f92fc238176604126d3b0af3ac05efe051a","Message":"fix(field-contract): P0 批次八条收口——券码链崩溃/分配假失败/SLA 违规表/流转反馈/翻页/编辑丢字段/搜索失效\n\n响应侧:\n- groupbuy-redemptions 券码链:listVouchers/getVoucher/findByPhone 三端点接 adaptVoucher\n 归一(此前直连 canonical 形状致 row.code undefined 渲染 TypeError 崩溃、核销入口\n 永不出现、手机号核销必失败);adaptVoucher/adaptRedemption 补 metadata 双读\n (buyerName/buyerPhone/orderAmount,金额一直在此前恒 ¥0);formatVoucherCode 空值\n 守卫;reversed 状态不再折叠为 unused\n- leads 分配链:后端 assign 返回补 assignedTo(成功分配此前被前端 TypeError 报成\n \"分配失败\");分配预览 null 守卫(无可分配人显示告警 Tag 而非崩溃);shared 类型\n assignedTo nullable 化\n- SLA 违规表:getBreachedClocks 富化工单/客户/策略上下文 + breachedBy 超时分钟计算\n (metric_type 兼容 resolution/first_response 双值域),此前裸时钟 DTO 致 7 列全空\n 且超时列渲染 NaN;单测断言更新为富化契约守卫\n- 工单流转反馈:前端 executeTransition 类型与消费改读后端真源键 toStatus\n (此前读 toStage 恒 undefined,流转成功却无提示不刷新)\n- ap-ledger 列表改标准分页包络 paginated()(此前裸 res.json 致前端 total 恒 0 无法翻页)\n\n请求侧(live 实锤):\n- tickets 编辑:updateTicketSchema 补 customerId/snId/orderId/projectId 关联键\n (与 create 对称,此前换客户被 Zod 静默剥离假成功)+ service 补同租户引用校验 +\n 前端 update() 白名单映射对称化;联系人字段组确认为无物理列的想象契约,归 P2 裁定\n- payments plans:schema 补 keyword/due_date_from/due_date_to + service 到期区间消费\n (搜索框此前输入无效),内部两调用点同步补键\n\n证据:双端类型检查干净;后端单测 640 文件/8795 全绿(SLA 断言更新为富化契约);\nap-ledger 3/3、sla 12/12 API 真打 DB;live curl 实锤:工单换客户写读回(已还原)、\nplans keyword 190→0 收敛、ap-ledger 标准包络 meta.pagination;前端 leads/\ngroupbuy-redemptions RTL 17/17;分诊台账 P0 段已标记收口。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T06:42:16-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/b6ca4eb97fca5dff7fe33490df662865134b08d2...34599f92fc238176604126d3b0af3ac05efe051a","Len":1}...
|
1783863745
|
Edit
Delete
|
|
17106
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"b6ca4eb97 {"Commits":[{"Sha1":"b6ca4eb97fca5dff7fe33490df662865134b08d2","Message":"fix(field-contract): 断链深挖三批收口——attribution 读模型重塑 + customers 查重富化 + cash-flow 对齐文档真源 + 筛选键 500 硬炸修复\n\n响应侧(前端声明字段后端从未返回 / 键名形状错位):\n- attribution 五报告全部对齐前端契约:model-comparison 重塑嵌套 comparison + models 假筛选真消费;\n overall stats 补 revenue/coverage 真实指标并删硬编码假数;channel/campaign/path 三报告修\n 键名错位与渲染崩溃隐患(creditPercent.toFixed / path.join),统一\"最近计算批次\"防重算翻倍;\n docs 三套幻想 schema 归真;multi-touch CSV 消费键同步\n- customers check-duplicate:match 补 phone/email/industry/primaryContact 四死字段;\n customer 与 matches[0] 深拷贝隔离(修共享引用被序列化为 \"[Circular]\" 的存量缺陷)\n- cash-flow 整模块对齐后端文档级 DTO(owner 矩阵裁定):统计卡/风险预警接真实端点,\n 列表/详情/编辑三视图重写(删 NaN%/静默丢弃/永不可达区块),detail 补回 notes 回读;\n 详情页真实消费 canonical /:id/items 明细子资源\n\n请求侧(live 复现实锤的运行时 500 与假筛选):\n- tickets 列表 9 个 schema 声明筛选键全部真消费(assigneeName/日期区间/多选/isOverdue/\n isEscalated/tags),teamId 无物理列显式吞掉防透传;修复前任意携带即整页 500\n- payments records:min/maxAmount 接 paid_amount 区间真消费,start/endDate 剔除透传\n- targets:end_date 区间补真实消费(此前从未实现),四日期键剔除透传\n\n治理配套:\n- 删除 attribution-models/attribution-reports 两个孤岛遗留 API 测试(打已删模块恒红)\n- acquisition 模块补 module-contract 单测(陈旧基线暴露的 D 级收口,A=282/D=0)\n- 49 条 CONFIRMED 分诊台账落盘 reports/field-contract-triage-2026-07-12.md\n (响应侧 5 域 42 条 + 请求侧 7 条,含共性根因与修复范式)\n\n证据:双端类型检查干净;后端单测 640 文件/8795 全绿(attribution-report 新增 7 用例、\ncustomers 引用隔离守卫);cash-flow RTL 19/19 重写;attribution/customers/multi-touch/\ncash-flow/targets API 真打 DB 全绿;三组筛选修复 live curl 收敛性断言(tickets 327→162/80/30、\npayments 177→0、targets 33→0);audit:tenant/response-columns/filter-truth/module-coverage\n全部达标且受控块零漂移。tickets/payments 两 API 套件失败经 stash 判责为存量债(vitest CJS\n加载/fixture 清理链),已记录台账。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T06:13:37-07:00"}],"HeadCommit":{"Sha1":"b6ca4eb97fca5dff7fe33490df662865134b08d2","Message":"fix(field-contract): 断链深挖三批收口——attribution 读模型重塑 + customers 查重富化 + cash-flow 对齐文档真源 + 筛选键 500 硬炸修复\n\n响应侧(前端声明字段后端从未返回 / 键名形状错位):\n- attribution 五报告全部对齐前端契约:model-comparison 重塑嵌套 comparison + models 假筛选真消费;\n overall stats 补 revenue/coverage 真实指标并删硬编码假数;channel/campaign/path 三报告修\n 键名错位与渲染崩溃隐患(creditPercent.toFixed / path.join),统一\"最近计算批次\"防重算翻倍;\n docs 三套幻想 schema 归真;multi-touch CSV 消费键同步\n- customers check-duplicate:match 补 phone/email/industry/primaryContact 四死字段;\n customer 与 matches[0] 深拷贝隔离(修共享引用被序列化为 \"[Circular]\" 的存量缺陷)\n- cash-flow 整模块对齐后端文档级 DTO(owner 矩阵裁定):统计卡/风险预警接真实端点,\n 列表/详情/编辑三视图重写(删 NaN%/静默丢弃/永不可达区块),detail 补回 notes 回读;\n 详情页真实消费 canonical /:id/items 明细子资源\n\n请求侧(live 复现实锤的运行时 500 与假筛选):\n- tickets 列表 9 个 schema 声明筛选键全部真消费(assigneeName/日期区间/多选/isOverdue/\n isEscalated/tags),teamId 无物理列显式吞掉防透传;修复前任意携带即整页 500\n- payments records:min/maxAmount 接 paid_amount 区间真消费,start/endDate 剔除透传\n- targets:end_date 区间补真实消费(此前从未实现),四日期键剔除透传\n\n治理配套:\n- 删除 attribution-models/attribution-reports 两个孤岛遗留 API 测试(打已删模块恒红)\n- acquisition 模块补 module-contract 单测(陈旧基线暴露的 D 级收口,A=282/D=0)\n- 49 条 CONFIRMED 分诊台账落盘 reports/field-contract-triage-2026-07-12.md\n (响应侧 5 域 42 条 + 请求侧 7 条,含共性根因与修复范式)\n\n证据:双端类型检查干净;后端单测 640 文件/8795 全绿(attribution-report 新增 7 用例、\ncustomers 引用隔离守卫);cash-flow RTL 19/19 重写;attribution/customers/multi-touch/\ncash-flow/targets API 真打 DB 全绿;三组筛选修复 live curl 收敛性断言(tickets 327→162/80/30、\npayments 177→0、targets 33→0);audit:tenant/response-columns/filter-truth/module-coverage\n全部达标且受控块零漂移。tickets/payments 两 API 套件失败经 stash 判责为存量债(vitest CJS\n加载/fixture 清理链),已记录台账。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T06:13:37-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/3d0a44a9c8d654139f4027f66c65b83a9ab64f0f...b6ca4eb97fca5dff7fe33490df662865134b08d2","Len":1}...
|
1783862034
|
Edit
Delete
|
|
17105
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"3d0a44a9c {"Commits":[{"Sha1":"3d0a44a9c8d654139f4027f66c65b83a9ab64f0f","Message":"fix(field-contract): 契约断链深挖收口——12 真缺陷修复 + filter-truth/prisma-zod 审计治理归真\n\n深挖 filter-truth/update三态/list-detail/response未消费四探针 2100+ 候选,逐条 live 代码追踪对抗验证,\n修复真实缺陷并把两个喂 HARD gate 的审计从「stale/坏工具掩盖」拉回真实。\n\n假筛选/数据丢失(8):\n- groupbuy-reviews: replyStatus(reply列)/sentiment(rating派生) 接线\n- hr payroll: periodCode 接线 + grades search→canonical keyword(删死型 GradeListParams.search)\n- groupbuy-platforms: authStatus 走 extraWhere 接线(列实在·原被白名单排除)\n- ad-placement placement.service.ts:441 end_date `?? null`→`undefined`(与 running 分支对齐,消非对称清空)\n- livestream-schedule coverUrl/coverImage/cover_image `.max(2000)`→`.max(500)`(收敛 cover_url VarChar(500))\n\nowner 决策项(3):\n- groupbuy-reviews.source: 增 source 列(migration 20260711235453,default 'manual')+全栈接线,formatReview 桩 'meituan'→真列\n- customers check-duplicate: 增 contact_name 查重维度(真源 customer_contacts.name,纯 service 层)\n- social-analytics.industry: 增 social_accounts.industry 列(migration 20260712000950)+getIndustryBenchmark 真实聚合\n (按 tenant+platform+industry 筛账号→单查询聚合 social_analytics 最新快照,无数据 dataAvailable=false,不再伪 'average')\n\n审计工具治理:\n- audit-filter-truth.ts: 修复因 Vue 物理退役(frontend/ 删除)导致的 typescript 解析 anchor 失效,审计复活\n- audit-prisma-zod-contract.ts: 为 6 个静态盲区 FP(superRefine/service-fill/bizCode)加受控豁免+核验理由,归真 PASS\n- filter-truth UNSUPPORTED 18→10 三轮重冻,GOVERNANCE-BASELINE ceiling 同步下调\n\n验证: 双端 type-check 绿;backend 8783 tests(+8 负断言);前端 social-accounts RTL 4/4;\nn1=0;prisma-zod PASS;schema 镜像一致;reconcile 零新增 drift(仅剩 2 个 pre-existing overdue 意图红线)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T00:27:30-07:00"}],"HeadCommit":{"Sha1":"3d0a44a9c8d654139f4027f66c65b83a9ab64f0f","Message":"fix(field-contract): 契约断链深挖收口——12 真缺陷修复 + filter-truth/prisma-zod 审计治理归真\n\n深挖 filter-truth/update三态/list-detail/response未消费四探针 2100+ 候选,逐条 live 代码追踪对抗验证,\n修复真实缺陷并把两个喂 HARD gate 的审计从「stale/坏工具掩盖」拉回真实。\n\n假筛选/数据丢失(8):\n- groupbuy-reviews: replyStatus(reply列)/sentiment(rating派生) 接线\n- hr payroll: periodCode 接线 + grades search→canonical keyword(删死型 GradeListParams.search)\n- groupbuy-platforms: authStatus 走 extraWhere 接线(列实在·原被白名单排除)\n- ad-placement placement.service.ts:441 end_date `?? null`→`undefined`(与 running 分支对齐,消非对称清空)\n- livestream-schedule coverUrl/coverImage/cover_image `.max(2000)`→`.max(500)`(收敛 cover_url VarChar(500))\n\nowner 决策项(3):\n- groupbuy-reviews.source: 增 source 列(migration 20260711235453,default 'manual')+全栈接线,formatReview 桩 'meituan'→真列\n- customers check-duplicate: 增 contact_name 查重维度(真源 customer_contacts.name,纯 service 层)\n- social-analytics.industry: 增 social_accounts.industry 列(migration 20260712000950)+getIndustryBenchmark 真实聚合\n (按 tenant+platform+industry 筛账号→单查询聚合 social_analytics 最新快照,无数据 dataAvailable=false,不再伪 'average')\n\n审计工具治理:\n- audit-filter-truth.ts: 修复因 Vue 物理退役(frontend/ 删除)导致的 typescript 解析 anchor 失效,审计复活\n- audit-prisma-zod-contract.ts: 为 6 个静态盲区 FP(superRefine/service-fill/bizCode)加受控豁免+核验理由,归真 PASS\n- filter-truth UNSUPPORTED 18→10 三轮重冻,GOVERNANCE-BASELINE ceiling 同步下调\n\n验证: 双端 type-check 绿;backend 8783 tests(+8 负断言);前端 social-accounts RTL 4/4;\nn1=0;prisma-zod PASS;schema 镜像一致;reconcile 零新增 drift(仅剩 2 个 pre-existing overdue 意图红线)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-12T00:27:30-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/cff2a7743a4472a541e5b285f5ce5e079be71d07...3d0a44a9c8d654139f4027f66c65b83a9ab64f0f","Len":1}...
|
1783841295
|
Edit
Delete
|
|
17104
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"cff2a7743 {"Commits":[{"Sha1":"cff2a7743a4472a541e5b285f5ce5e079be71d07","Message":"fix(governance): 菜单审计假阴性修复 + 14 条孤儿路由收口\n\n「内容与社媒工作台/视频内容/视频发布/视频数据/供应链工作台/系统导入/\n后台中心 无对应 API 或壳入口」经端点级 FE↔BE diff 逐条核查为污染前提,\n根因是 audit-menu-inventory 三处旧判定:\n\n- hasView 按同名 views/ 目录判 → 改为路由真源解析(lazyView import 的\n 视图文件存在性),同名目录仅兜底;\n- hasApi 按同名 api/modules/\u003cpath\u003e.ts 判 → 改为视图文件真实 @/api import\n 判定(共享 owner 映射,含目录 Index 薄壳一层转发),同名文件仅兜底;\n- 孤儿检测解析 Vue 时代 meta: 块(React 树全用 handle:,orphanRoutes=0\n 假绿)→ 改为 handle: 块窗口解析 + menu.ts 全部 path 字面量保守对比。\n\n修后揭示的 14 条真孤儿路由同轮收口:\n- /marketing-workflows 为指向 /marketing-automation 的兼容重定向壳,\n 补 hideInMenu: true;\n- 其余 13 条(store-agency / customer-balance / payment-analytics /\n disbursements / finance-periods / finance-os 支出与风险 3 项 /\n fulfillment 5 项)按路由 handle 声明的中心与分组补录进 menu.ts。\n\n证据与终态:menu-inventory 291→304 项全绿率 100%、孤儿 14→0;\nview-governance menuVisibleCount 293→306 基线同步,audit:view-governance\n复跑全绿;frontend-react tsc --noEmit 零错误,Sidebar/guards 测试 8 用例全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-11T20:48:16-07:00"}],"HeadCommit":{"Sha1":"cff2a7743a4472a541e5b285f5ce5e079be71d07","Message":"fix(governance): 菜单审计假阴性修复 + 14 条孤儿路由收口\n\n「内容与社媒工作台/视频内容/视频发布/视频数据/供应链工作台/系统导入/\n后台中心 无对应 API 或壳入口」经端点级 FE↔BE diff 逐条核查为污染前提,\n根因是 audit-menu-inventory 三处旧判定:\n\n- hasView 按同名 views/ 目录判 → 改为路由真源解析(lazyView import 的\n 视图文件存在性),同名目录仅兜底;\n- hasApi 按同名 api/modules/\u003cpath\u003e.ts 判 → 改为视图文件真实 @/api import\n 判定(共享 owner 映射,含目录 Index 薄壳一层转发),同名文件仅兜底;\n- 孤儿检测解析 Vue 时代 meta: 块(React 树全用 handle:,orphanRoutes=0\n 假绿)→ 改为 handle: 块窗口解析 + menu.ts 全部 path 字面量保守对比。\n\n修后揭示的 14 条真孤儿路由同轮收口:\n- /marketing-workflows 为指向 /marketing-automation 的兼容重定向壳,\n 补 hideInMenu: true;\n- 其余 13 条(store-agency / customer-balance / payment-analytics /\n disbursements / finance-periods / finance-os 支出与风险 3 项 /\n fulfillment 5 项)按路由 handle 声明的中心与分组补录进 menu.ts。\n\n证据与终态:menu-inventory 291→304 项全绿率 100%、孤儿 14→0;\nview-governance menuVisibleCount 293→306 基线同步,audit:view-governance\n复跑全绿;frontend-react tsc --noEmit 零错误,Sidebar/guards 测试 8 用例全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-11T20:48:16-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/c39315b6c9e556d9dfa9fa55cc933d6b5d74d2a6...cff2a7743a4472a541e5b285f5ce5e079be71d07","Len":1}...
|
1783828105
|
Edit
Delete
|
|
17085
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"c39315b6c {"Commits":[{"Sha1":"c39315b6c9e556d9dfa9fa55cc933d6b5d74d2a6","Message":"fix(governance): 治理数字对账收口——MEDIUM 清零 + stale 报告刷新 + release-gate 滞后阻断消除\n\n- users 重置密码前端规则对齐后端 Zod:min 6→8,补大小写字母+数字 pattern(真实契约 bug,7 RTL 用例通过)\n- frontend-source-adapter 新增视图子树→真实模块重映射:ai-agents/skill-library 归 ai-agent-skills\n (表单实走 ai-agent-skills API,description max 4000 与 Zod 一致,消除目录名误配假告警)\n- 重跑 10 个超期 stale 审计(ai-assist 系列/migration-safety/time-analysis/workflow/process-definition 等)\n- census e2e.specFiles 基线重冻 294→338(随治理波次提交的真实增长)\n- 重跑 production-release-gate/actions:滞后的 harness-high-zero 阻断消除,11→10 条真实 P0 阻断\n- 终态:dashboard C=0/H=0/M=0、stale=0、formrules WARNING=0;\n baseline-reconcile 242 条断言 drift 10→2,剩余 2 条为受控块明文保留的 overdue 真实红线\n (10 条 P0 上线阻断逾期,只能真完成或指挥官重排 due date,不得改绿)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T02:05:45-07:00"}],"HeadCommit":{"Sha1":"c39315b6c9e556d9dfa9fa55cc933d6b5d74d2a6","Message":"fix(governance): 治理数字对账收口——MEDIUM 清零 + stale 报告刷新 + release-gate 滞后阻断消除\n\n- users 重置密码前端规则对齐后端 Zod:min 6→8,补大小写字母+数字 pattern(真实契约 bug,7 RTL 用例通过)\n- frontend-source-adapter 新增视图子树→真实模块重映射:ai-agents/skill-library 归 ai-agent-skills\n (表单实走 ai-agent-skills API,description max 4000 与 Zod 一致,消除目录名误配假告警)\n- 重跑 10 个超期 stale 审计(ai-assist 系列/migration-safety/time-analysis/workflow/process-definition 等)\n- census e2e.specFiles 基线重冻 294→338(随治理波次提交的真实增长)\n- 重跑 production-release-gate/actions:滞后的 harness-high-zero 阻断消除,11→10 条真实 P0 阻断\n- 终态:dashboard C=0/H=0/M=0、stale=0、formrules WARNING=0;\n baseline-reconcile 242 条断言 drift 10→2,剩余 2 条为受控块明文保留的 overdue 真实红线\n (10 条 P0 上线阻断逾期,只能真完成或指挥官重排 due date,不得改绿)\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T02:05:45-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/9646e903603f789cc51ec4b32200b70b3ccf2cff...c39315b6c9e556d9dfa9fa55cc933d6b5d74d2a6","Len":1}...
|
1783674369
|
Edit
Delete
|
|
17081
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"9646e9036 {"Commits":[{"Sha1":"9646e903603f789cc51ec4b32200b70b3ccf2cff","Message":"docs(api): 重新生成 OpenAPI 契约与全量 API 参考(React 单前端真源口径)\n\n- openapi.json / openapi.yaml 按当前 Zod-First 真源全量重生成\n- 新增 all-api-reference.md 与 generate-api-reference.mjs 生成入口\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T01:32:29-07:00"},{"Sha1":"7b8988454f47c83a3fd319e7dc8f9a7cfeb5d649","Message":"fix(architecture): 后端架构边界治理——跨模块调用收口公开入口 + 依赖图基线门禁\n\n- commissions/revenue/treasury/assets/channel-analytics 等跨域直接依赖改走目标模块 index.* 公开入口\n- 新增 backend-module-dependencies 依赖图审计基线(存量 INFO 冻结,基线外新增硬阻断)与测试\n- 补 event-outbox-helper / password 单元测试;vitest workspace/coverage 配置对齐\n- 附 2026-07-09 菜单 292 能力真源分析报告与三份架构治理作战卡\n- 验收:pnpm -C backend run type-check 通过\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T01:32:19-07:00"},{"Sha1":"20c082f55e0c4be2105dedce9069420e2750d3fa","Message":"chore(frontend): Vue 前端物理退役——frontend/ 与 mobile/ 全面删除,React 单一真源收口\n\n- 物理删除 frontend/(1876 文件)与 mobile/(197 文件)Vue/Vant 工程,历史仅由 Git 追溯\n- pnpm workspace、启动链、CI、Harness、E2E view-governance、审计扫描根全部切换到 frontend-react/\n- 删除 Vue-only 治理脚本 13 个与旧 view-governance 快照/生成器/验证器\n- dev docker-compose frontend 服务切换为根 context + frontend-react/Dockerfile(对齐 prod),映射 5173:80\n- 新增 React 生产镜像链:frontend-react/Dockerfile、Dockerfile.prebuilt、nginx.conf、.env.example\n- check-env.sh / start-dev.sh / quick-start.sh 与 DOCKER.md / START-HERE.md / 部署与启动指南死命令收口为 frontend-react\n- 删除 Vue 时代死脚本 run_tsc.sh / generate_smoke_tests.py / debug-blank-page.html\n- CLAUDE.md / AGENTS.md / README.md / GEMINI.md / QWEN.md 同步单一前端真源口径\n- 验收:pnpm -C frontend-react run type-check 通过、docker compose config 通过、主树 .vue=0、运行链残留扫描=0\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T01:30:05-07:00"}],"HeadCommit":{"Sha1":"9646e903603f789cc51ec4b32200b70b3ccf2cff","Message":"docs(api): 重新生成 OpenAPI 契约与全量 API 参考(React 单前端真源口径)\n\n- openapi.json / openapi.yaml 按当前 Zod-First 真源全量重生成\n- 新增 all-api-reference.md 与 generate-api-reference.mjs 生成入口\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-10T01:32:29-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/101858c06a69a0ecf99c3366f5034de2786d0495...9646e903603f789cc51ec4b32200b70b3ccf2cff","Len":3}...
|
1783672582
|
Edit
Delete
|
|
17042
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"101858c06 {"Commits":[{"Sha1":"101858c06a69a0ecf99c3366f5034de2786d0495","Message":"Fix RMA contract drift and tighten cleanup/runtime governance\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T23:29:51-07:00"},{"Sha1":"495ebd9d6db6af72c778e70ffe22cf9c6b467ff9","Message":"fix(governance): 收口跨域运行真源与验收门禁\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T23:04:48-07:00"}],"HeadCommit":{"Sha1":"101858c06a69a0ecf99c3366f5034de2786d0495","Message":"Fix RMA contract drift and tighten cleanup/runtime governance\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T23:29:51-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/78a500f04042e394b04075c3823e4431ed58b463...101858c06a69a0ecf99c3366f5034de2786d0495","Len":2}...
|
1783665486
|
Edit
Delete
|
|
16977
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"78a500f04 {"Commits":[{"Sha1":"78a500f04042e394b04075c3823e4431ed58b463","Message":"fix(governance): 2026-07-09 契约治理四轮收口——query 布尔 coerce 清零、snake 死键修复、假筛选裁定与断链深挖\n\n- query 布尔参数 coerce 全仓收口:218 处/76 文件归零,新增 scripts/audit-query-boolean.ts 棘轮审计并接入 registry(query-boolean-violations-zero == 0)\n- query snake 死键收口:39 处真死键修复(9 模块),豁免/双读/preprocess 三类假死判据落盘\n- 假筛选群收口:12 键三分法裁定,filter-truth UNSUPPORTED 22→10,后端补消费按 schema+controller 白名单+service where 三点齐\n- 契约断链二轮深挖:renewals 非互逆映射、duplicate 丢名、partner-customers 键名不对称等 10 组用户可见断链修复\n- 新增迁移:rma_type_reason_columns、ad_audiences_add_data_source\n- 全域视图审计矩阵报告(a1~a9 九域)、契约断链/深对齐审计报告、代码导出 PDF\n- 同步 reports/*.latest.json 基线与 CLAUDE.md GOVERNANCE-BASELINE 受控块\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T19:18:14-07:00"},{"Sha1":"e6db8812d3c3c7a2c0bdae632c2f1b3f2e9b4fe8","Message":"test(campaigns): 对齐 goals_json 合并读后的 findFirst 调用链,修复 10 个存量假红用例\n\ncommit 4a6c61fc35 将 CampaignService.update 的 goals_json 合并分支触发条件\n扩到 goalsJson/storeScopeMode/storeIds 后,complete/attribute/schedule/selectTools\n路径的 update 多出一次 findFirst({ select: goals_json })合并读(4 次→5 次)。\n测试 mock 队列未同步:\n- marketing.service.test.ts completeCampaign 用例第 5 次调用兜底到前序用例\n 遗留的持久 mockResolvedValue(status=draft),报 expected 'draft' to be 'completed'\n- campaign.service.enhanced.test.ts 使用 mockReset,队列耗尽返回 undefined→404,\n 9 个状态机生命周期用例失败\n\n按 assertion-theater-guard 口径裁定:实现无 bug(合并语义为有意行为且带\ntenant_id),仅在各 mock 队列第 2 位插入合并读返回值并更新链路注释,\n未改动/弱化任何断言。marketing 23/23、campaigns 59/59 全绿。\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T18:51:30-07:00"},{"Sha1":"9023c1468b7cbd83719f42c6a5521a42813848e7","Message":"fix(governance): tighten service contracts and route validation\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-06T22:32:22-07:00"},{"Sha1":"1f15101e932088234cf16f0606e6dc9227f018e3","Message":"Tighten alliance API tests and order action fallback\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-04T01:04:30-07:00"},{"Sha1":"c892b8637c2fdb10b1246caa149a7e353c442aa6","Message":"Refine governance and frontend workflows\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-04T00:59:39-07:00"}],"HeadCommit":{"Sha1":"78a500f04042e394b04075c3823e4431ed58b463","Message":"fix(governance): 2026-07-09 契约治理四轮收口——query 布尔 coerce 清零、snake 死键修复、假筛选裁定与断链深挖\n\n- query 布尔参数 coerce 全仓收口:218 处/76 文件归零,新增 scripts/audit-query-boolean.ts 棘轮审计并接入 registry(query-boolean-violations-zero == 0)\n- query snake 死键收口:39 处真死键修复(9 模块),豁免/双读/preprocess 三类假死判据落盘\n- 假筛选群收口:12 键三分法裁定,filter-truth UNSUPPORTED 22→10,后端补消费按 schema+controller 白名单+service where 三点齐\n- 契约断链二轮深挖:renewals 非互逆映射、duplicate 丢名、partner-customers 键名不对称等 10 组用户可见断链修复\n- 新增迁移:rma_type_reason_columns、ad_audiences_add_data_source\n- 全域视图审计矩阵报告(a1~a9 九域)、契约断链/深对齐审计报告、代码导出 PDF\n- 同步 reports/*.latest.json 基线与 CLAUDE.md GOVERNANCE-BASELINE 受控块\n\nCo-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-09T19:18:14-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/04d57d74d0373aea967c831c21a1c4526095da1d...78a500f04042e394b04075c3823e4431ed58b463","Len":20}...
|
1783653434
|
Edit
Delete
|
|
15973
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"04d57d74d {"Commits":[{"Sha1":"04d57d74d0373aea967c831c21a1c4526095da1d","Message":"chore(governance): route-shadowing 接入棘轮门禁全链(受控块断言 + harness:check + 对账)\n\n承接 registry 注册(7212bb0f7d),完成红线 9「注册即执行」的剩余三件套:\n- CLAUDE.md GOVERNANCE-BASELINE 受控块新增断言\n route-shadowing-zero | route-shadowing-audit.latest.json | summary.shadowedRoutes | == | 0\n (零阈值:32 处死路由已全收口,任何回潮立即 drift 阻塞)\n- package.json harness:check 链尾接入 audit-route-shadowing 实跑\n- 重跑 baseline-reconcile + harness dashboard:新断言实测 0==0 ✓;\n dashboard critical 0 / high 0 / medium 11(\u003c= 51 ceiling)、\n reports missing/stale/invalid 全 0。\n\n对账说明:reconcile 仅存的 2 条 VALUE_DRIFT 为既有真实红线\n(production-release-gate/actions 两条 *-overdue-zero 实测 10——10 条 P0\n上线阻断 dueDate 过期,受控块注释明确故意保持 ==0 不得凑绿,须真实完成\n或指挥官重排 due date 清除),与本次接入无关、未触碰。\n\n至此「静态路由被参数化路由遮蔽」bug 家族防回潮闭环:\n审计脚本(退出码 1 硬阻塞)→ registry 选跑触发 → harness:check 全量链 →\n受控块零阈值对账,四层锁死。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:22:21-07:00"}],"HeadCommit":{"Sha1":"04d57d74d0373aea967c831c21a1c4526095da1d","Message":"chore(governance): route-shadowing 接入棘轮门禁全链(受控块断言 + harness:check + 对账)\n\n承接 registry 注册(7212bb0f7d),完成红线 9「注册即执行」的剩余三件套:\n- CLAUDE.md GOVERNANCE-BASELINE 受控块新增断言\n route-shadowing-zero | route-shadowing-audit.latest.json | summary.shadowedRoutes | == | 0\n (零阈值:32 处死路由已全收口,任何回潮立即 drift 阻塞)\n- package.json harness:check 链尾接入 audit-route-shadowing 实跑\n- 重跑 baseline-reconcile + harness dashboard:新断言实测 0==0 ✓;\n dashboard critical 0 / high 0 / medium 11(\u003c= 51 ceiling)、\n reports missing/stale/invalid 全 0。\n\n对账说明:reconcile 仅存的 2 条 VALUE_DRIFT 为既有真实红线\n(production-release-gate/actions 两条 *-overdue-zero 实测 10——10 条 P0\n上线阻断 dueDate 过期,受控块注释明确故意保持 ==0 不得凑绿,须真实完成\n或指挥官重排 due date 清除),与本次接入无关、未触碰。\n\n至此「静态路由被参数化路由遮蔽」bug 家族防回潮闭环:\n审计脚本(退出码 1 硬阻塞)→ registry 选跑触发 → harness:check 全量链 →\n受控块零阈值对账,四层锁死。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:22:21-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7212bb0f7d8f202759b9ddb0e2204b3745825847...04d57d74d0373aea967c831c21a1c4526095da1d","Len":1}...
|
1783074148
|
Edit
Delete
|
|
15972
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"7212bb0f7 {"Commits":[{"Sha1":"7212bb0f7d8f202759b9ddb0e2204b3745825847","Message":"chore(harness): route-shadowing 审计接入 audit-registry(红线 9 注册即执行)\n\n将 scripts/audit-route-shadowing.ts 正式注册进 AUDIT_REGISTRY(第 72 项):\n- trigger: backend/src/modules/**/*.routes.ts 变更时选跑(gate: smart)\n- reportFile: reports/route-shadowing-audit.latest.json(已在仓、当前 shadowed=0)\n- 硬阻塞语义在审计脚本自身(新增遮蔽退出码 1);harness 侧经 report.ts 的\n adaptGeneric fallback 消化 findings(无 severity 默认 INFO,不污染\n dashboard high/medium),符合「脚本硬门禁 + dashboard INFO 记录」棘轮口径。\n\n接入验证:registry 解析 OK(72 项)、report.ts:3450 按 reportFile 文件名\n自动路由 adaptGeneric 成立、报告新鲜且 0 遮蔽。至此「静态路由被参数化路由\n遮蔽」bug 家族(1329d688e0 收口的 32 处死路由)具备防回潮机器门禁。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:20:52-07:00"}],"HeadCommit":{"Sha1":"7212bb0f7d8f202759b9ddb0e2204b3745825847","Message":"chore(harness): route-shadowing 审计接入 audit-registry(红线 9 注册即执行)\n\n将 scripts/audit-route-shadowing.ts 正式注册进 AUDIT_REGISTRY(第 72 项):\n- trigger: backend/src/modules/**/*.routes.ts 变更时选跑(gate: smart)\n- reportFile: reports/route-shadowing-audit.latest.json(已在仓、当前 shadowed=0)\n- 硬阻塞语义在审计脚本自身(新增遮蔽退出码 1);harness 侧经 report.ts 的\n adaptGeneric fallback 消化 findings(无 severity 默认 INFO,不污染\n dashboard high/medium),符合「脚本硬门禁 + dashboard INFO 记录」棘轮口径。\n\n接入验证:registry 解析 OK(72 项)、report.ts:3450 按 reportFile 文件名\n自动路由 adaptGeneric 成立、报告新鲜且 0 遮蔽。至此「静态路由被参数化路由\n遮蔽」bug 家族(1329d688e0 收口的 32 处死路由)具备防回潮机器门禁。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:20:52-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/06c1676e4e8d18d0a3797df1323ed4d768d3bee8...7212bb0f7d8f202759b9ddb0e2204b3745825847","Len":1}...
|
1783074059
|
Edit
Delete
|
|
15971
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"06c1676e4 {"Commits":[{"Sha1":"06c1676e4e8d18d0a3797df1323ed4d768d3bee8","Message":"fix(rma): complete 契约错位收口——resolution 真落库、completed_at 从死写复活\n\n前端 rmaApi.complete 发送 resolution/refundAmount/returnShippingNo/\nreturnShippingCarrier 四字段,而后端 completeRmaSchema 只收 returnedItem——\n全部被 Zod 静默剥离;且 completeRma 的 updateMany 从不写 completed_at,\n详情 timeline 依赖 completed_at 生成的「完成」节点永不出现(死节点)。\n\n修复(接线 + 契约收敛双向):\n- 后端:completeRmaSchema 补 resolution(max 2000,可选);completeRma 写入\n completed_at + 将 resolution 并入 logistics_json(与 diagnose 的 diagnosis\n 键同构,保留既有 JSON 键);controller 透传。\n- 前端 api:complete 签名收敛为 { resolution, returnedItem? }——删除后端无\n 写链的 refundAmount/returnShippingNo/returnShippingCarrier 死字段(退款\n 金额属财务域真源,不在 RMA JSON 记第二份)。\n- 前端 Detail(视图驱动闭环):完成确认框升级为受控 Modal 真收集处理结论\n (默认「已完成处理」,与既有拒绝原因 Modal 同构);Descriptions 新增\n 「诊断结论」「处理结论」两行读 logisticsJson.diagnosis/resolution,\n 写入的信息在详情页真正查得回。\n\n真实端到端验证(运行中后端 + 真实 DB):\n- created→receive→process→complete 带 resolution:status=completed、\n completedAt 落库(timeline 完成节点复活)、logisticsJson.resolution\n API 读回与 DB 直证一致。\n- 顺带补验上一提交的 diagnose 对齐链:receive→diagnose 带 diagnosisResult,\n DB 直证 logistics_json.diagnosis 落库。\n\n新增回归锁定单测:断言 updateMany 写 completed_at + logistics_json 合并\nresolution 且保留既有 diagnosis 键。rma.service.test.ts 34/34 通过;\n前后端 type-check 全绿。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:16:05-07:00"}],"HeadCommit":{"Sha1":"06c1676e4e8d18d0a3797df1323ed4d768d3bee8","Message":"fix(rma): complete 契约错位收口——resolution 真落库、completed_at 从死写复活\n\n前端 rmaApi.complete 发送 resolution/refundAmount/returnShippingNo/\nreturnShippingCarrier 四字段,而后端 completeRmaSchema 只收 returnedItem——\n全部被 Zod 静默剥离;且 completeRma 的 updateMany 从不写 completed_at,\n详情 timeline 依赖 completed_at 生成的「完成」节点永不出现(死节点)。\n\n修复(接线 + 契约收敛双向):\n- 后端:completeRmaSchema 补 resolution(max 2000,可选);completeRma 写入\n completed_at + 将 resolution 并入 logistics_json(与 diagnose 的 diagnosis\n 键同构,保留既有 JSON 键);controller 透传。\n- 前端 api:complete 签名收敛为 { resolution, returnedItem? }——删除后端无\n 写链的 refundAmount/returnShippingNo/returnShippingCarrier 死字段(退款\n 金额属财务域真源,不在 RMA JSON 记第二份)。\n- 前端 Detail(视图驱动闭环):完成确认框升级为受控 Modal 真收集处理结论\n (默认「已完成处理」,与既有拒绝原因 Modal 同构);Descriptions 新增\n 「诊断结论」「处理结论」两行读 logisticsJson.diagnosis/resolution,\n 写入的信息在详情页真正查得回。\n\n真实端到端验证(运行中后端 + 真实 DB):\n- created→receive→process→complete 带 resolution:status=completed、\n completedAt 落库(timeline 完成节点复活)、logisticsJson.resolution\n API 读回与 DB 直证一致。\n- 顺带补验上一提交的 diagnose 对齐链:receive→diagnose 带 diagnosisResult,\n DB 直证 logistics_json.diagnosis 落库。\n\n新增回归锁定单测:断言 updateMany 写 completed_at + logistics_json 合并\nresolution 且保留既有 diagnosis 键。rma.service.test.ts 34/34 通过;\n前后端 type-check 全绿。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:16:05-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/c4a1b8ebcc54d4a222aa030b845818ad365b950d...06c1676e4e8d18d0a3797df1323ed4d768d3bee8","Len":1}...
|
1783073771
|
Edit
Delete
|
|
15970
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"c4a1b8ebc {"Commits":[{"Sha1":"c4a1b8ebcc54d4a222aa030b845818ad365b950d","Message":"fix(sn/contracts): bind 接回守卫实现 + 六模块死字段契约清理批\n\n一、serial-numbers bind 接回 bindSerialNumber(bug 家族第 5 处收口)\n语义核实修正:bindSerialNumber 服务函数的 where 条件 status:'in_stock' 是\n乐观锁前置,data 实写 status:'shipped'——即「绑定即随单发货」,与 controller\n语义一致,非此前疑似的语义漂移,无需产品决策。差别是 controller 裸写版本\n缺订单/明细/客户存在性校验、缺 in_stock+未绑定乐观锁、缺 sn_bound 事件,\n且守卫实现是零调用死代码。修复:\n- controller.bind 接回 bindSerialNumber;路由挂 validate(bindSerialNumberSchema)\n (orderId/customerId 必填)。\n- 前端 api bind 签名对齐后端契约(orderId/customerId 必填 + orderItemId/\n shipmentId 可选),删除后端无写链的 contractId/assetId 死字段。\n- live 四向验证:缺 orderId→400、假订单→404 订单不存在、真绑定→200 且\n DB 直证 shipped+bound_order_id+bound_customer_id 落库、重复绑定→conflict\n 乐观锁拦截;验证后经 /return 恢复(顺带复验 restockReturned 清绑定生效)。\n- 新增 controller 回归锁定测试(断言走 bindSerialNumber 且裸 update 未被调)。\n\n二、契约清理批(六项,Zod 收下但永不落库/错位的死契约)\n① inventory 仓库:create/update schema 删 contactName/contactPhone/notes\n (warehouses 无列、mapper 显式忽略、前端不收集),mapper 忽略条目一并清。\n② opportunities:create body 删 phone/email/province/city/address/industry/\n contact_name/contact_phone 八个死字段(service 自动建客户只写 name、无\n customer_contacts 写链、前端走客户选择器不发送);update 派生自动净化;\n IM intent-analyzer 调用点同步清 undefined 占位死参数。live:带 phone 创建\n 被 strict 400 拒绝(Unrecognized key)。\n③ opportunities list startDate/endDate 接线(此前被 allowedFilterFields\n 白名单静默忽略):落创建时间区间。live:全量 317 → 未来起点 0/过去终点 0。\n④ targets update 删 milestones(sales_targets 无标量列、update 无子表写链,\n 透传会触发 Prisma Unknown argument;create 子表写链保留);前端\n toUpdateWire/UpdateTargetRequest 同步删。\n⑤ rma:diagnose/complete 两处 Zod + docs 删 service 从不读取的 eventInsights;\n 前端 diagnose 签名对齐后端唯一持久化键 diagnosisResult(旧\n diagnosis/faultType/severity 与后端完全错位、会被静默剥离)。\n⑥ livestream createSchedule 删冗余必填死字段 scheduledStartAt/scheduledEndAt\n (service 只读 scheduledStart/scheduledEnd,旧契约强迫调用方双发同值且第二\n 份被丢);前端读 DTO 类型同步对齐 scheduledStart/scheduledEnd(旧 *At 键\n DTO 从不返回,恒 undefined)。live:不带 *At 创建过 Zod 进入业务校验。\n\n验证:前后端 type-check 全绿;opportunities/targets/rma/livestream/inventory/\nserial-numbers 测试 192/192 通过;formrules-zod errors 0、field-payload 0/0、\nenum-consistency 无新增。\n\nBacklog 登记:rma complete 前端发送 resolution/refundAmount/returnShipping*\n与后端 completeRmaSchema(returnedItem) 错位(Detail 仅发硬编码文案,无用户\n数据损失),待定接线或清理方向。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:06:13-07:00"}],"HeadCommit":{"Sha1":"c4a1b8ebcc54d4a222aa030b845818ad365b950d","Message":"fix(sn/contracts): bind 接回守卫实现 + 六模块死字段契约清理批\n\n一、serial-numbers bind 接回 bindSerialNumber(bug 家族第 5 处收口)\n语义核实修正:bindSerialNumber 服务函数的 where 条件 status:'in_stock' 是\n乐观锁前置,data 实写 status:'shipped'——即「绑定即随单发货」,与 controller\n语义一致,非此前疑似的语义漂移,无需产品决策。差别是 controller 裸写版本\n缺订单/明细/客户存在性校验、缺 in_stock+未绑定乐观锁、缺 sn_bound 事件,\n且守卫实现是零调用死代码。修复:\n- controller.bind 接回 bindSerialNumber;路由挂 validate(bindSerialNumberSchema)\n (orderId/customerId 必填)。\n- 前端 api bind 签名对齐后端契约(orderId/customerId 必填 + orderItemId/\n shipmentId 可选),删除后端无写链的 contractId/assetId 死字段。\n- live 四向验证:缺 orderId→400、假订单→404 订单不存在、真绑定→200 且\n DB 直证 shipped+bound_order_id+bound_customer_id 落库、重复绑定→conflict\n 乐观锁拦截;验证后经 /return 恢复(顺带复验 restockReturned 清绑定生效)。\n- 新增 controller 回归锁定测试(断言走 bindSerialNumber 且裸 update 未被调)。\n\n二、契约清理批(六项,Zod 收下但永不落库/错位的死契约)\n① inventory 仓库:create/update schema 删 contactName/contactPhone/notes\n (warehouses 无列、mapper 显式忽略、前端不收集),mapper 忽略条目一并清。\n② opportunities:create body 删 phone/email/province/city/address/industry/\n contact_name/contact_phone 八个死字段(service 自动建客户只写 name、无\n customer_contacts 写链、前端走客户选择器不发送);update 派生自动净化;\n IM intent-analyzer 调用点同步清 undefined 占位死参数。live:带 phone 创建\n 被 strict 400 拒绝(Unrecognized key)。\n③ opportunities list startDate/endDate 接线(此前被 allowedFilterFields\n 白名单静默忽略):落创建时间区间。live:全量 317 → 未来起点 0/过去终点 0。\n④ targets update 删 milestones(sales_targets 无标量列、update 无子表写链,\n 透传会触发 Prisma Unknown argument;create 子表写链保留);前端\n toUpdateWire/UpdateTargetRequest 同步删。\n⑤ rma:diagnose/complete 两处 Zod + docs 删 service 从不读取的 eventInsights;\n 前端 diagnose 签名对齐后端唯一持久化键 diagnosisResult(旧\n diagnosis/faultType/severity 与后端完全错位、会被静默剥离)。\n⑥ livestream createSchedule 删冗余必填死字段 scheduledStartAt/scheduledEndAt\n (service 只读 scheduledStart/scheduledEnd,旧契约强迫调用方双发同值且第二\n 份被丢);前端读 DTO 类型同步对齐 scheduledStart/scheduledEnd(旧 *At 键\n DTO 从不返回,恒 undefined)。live:不带 *At 创建过 Zod 进入业务校验。\n\n验证:前后端 type-check 全绿;opportunities/targets/rma/livestream/inventory/\nserial-numbers 测试 192/192 通过;formrules-zod errors 0、field-payload 0/0、\nenum-consistency 无新增。\n\nBacklog 登记:rma complete 前端发送 resolution/refundAmount/returnShipping*\n与后端 completeRmaSchema(returnedItem) 错位(Detail 仅发硬编码文案,无用户\n数据损失),待定接线或清理方向。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T03:06:13-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/da76fc5e9fcbc3f937fa2bee7743931f9b60e4db...c4a1b8ebcc54d4a222aa030b845818ad365b950d","Len":1}...
|
1783073192
|
Edit
Delete
|
|
15969
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"da76fc5e9 {"Commits":[{"Sha1":"da76fc5e9fcbc3f937fa2bee7743931f9b60e4db","Message":"docs(governance): 沉淀契约断链深挖战役经验(两个 bug 家族 + live 复现纪律)\n\nbaseline-and-experience.md 置顶新增 2026-07-01~07-03 战役经验块:\n- 核心发现:静态审计停在 Zod 边界,语义断链全在 Zod 之后(casing 错位/\n 缺列/mapper 错映射/绕守卫/路由遮蔽),深挖口径为追「Zod→prisma 写入」\n 与「筛选参数→where」两条真实链的断点。\n- Bug 家族 1「controller 绕守卫走裸 batchAction」:11 模块命中、真断链 4、\n 三查判定法(updateStatus 覆写/update 覆写/batchAction 覆写)豁免 5。\n- Bug 家族 2「静态路由被参数化路由遮蔽」:16 文件 32 处死路由全收口,\n 防回潮探测器 audit:route-shadowing 已入仓。\n- live 复现铁律:子代理 5 个「最强候选」全是假阳性(死 controller/\n BaseService 自动筛选/crud fallback 静默丢弃),改前必正负两向真请求复现。\n- 修复分类法(六种证据形态→修法映射表)、状态词汇多源漂移多数决收敛法、\n 测试防剧场增补(mock FieldMapper 须应用真实映射表)、环境坑增补\n (rogue next 遮蔽 3000/Prisma client 重启/非交互迁移纪律)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T02:46:55-07:00"},{"Sha1":"1329d688e027093bb5a1157466cef5cfdfa0513f","Message":"fix(routes): 全仓收口 32 处路由遮蔽死路由,新增 route-shadowing 审计防回潮\n\n承接 supply-chain 采购单批量路由被 /:id 吞掉的发现(fb706e38d6),写模拟\nExpress 顺序匹配的扫描器全仓核查:同一 routes 文件内,先注册的参数化路由\n(/:id...)会吞掉后注册的静态段路由(/batch、/export、/stats、/calendar、\n/today、/templates 等),使其永远不可达——调用方拿到的是详情 handler 的\nPRISMA_P2023/404(静态段被当 UUID 传给 findFirst)。\n\n实测 16 个文件 32 处真死路由(live 抽验 today/stats/calendar 均复现 P2023),\n覆盖:ad-campaigns 批量启停、campaign-targets/contract-templates/tickets/\npartner-customers/social-interactions 批量删除、knowledge-capture 批量审批+\n规则统计、lead-qualification 批量评分/认定、livestream-schedules 日历/今日、\nmarketing 归因 5 个报表端点、satisfaction 响应导出、social-posts 日历/批量\n发布、cash-flow 高风险付款行为、geo-keywords 导出、inventory 盘点行批量、\nsupply-chain 供应商批量删除。\n\n修复:全部静态路由前移到对应参数化路由之前(纯注册顺序移动,handler/权限/\nvalidate schema 一律未动),每处补中文注释说明顺序约束。\n\n防回潮:新增 scripts/audit-route-shadowing.ts(pnpm run audit:route-shadowing),\n模拟 Express 逐段匹配、已处理 :id(regex) 约束段(UUID 正则不吞 batch,剔除\n7 处假阳性);任何新增遮蔽退出码 1,报告写 reports/route-shadowing-audit.latest.json。\n暂未注册 audit-registry(避免触发 reports-missing-zero,接入棘轮由治理口径决定)。\n\n验证:重扫 361 个 routes 文件 0 遮蔽;backend type-check 全绿;live 抽验 10\n端点全部复活(3 处 P2023→success、attribution 5 端点 200、2 个 export 200);\nroute-registration 审计重复挂载 0。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T02:39:19-07:00"},{"Sha1":"fb706e38d6ba2c08bcea5e43c0da60db2b328e7c","Message":"fix(sn/supply-chain/content-templates): 全仓收口「controller 绕守卫走裸 batchAction」bug 家族\n\n承接 content-creation(ad0aff1667)后全仓扫描 batchAction('update_status')\n家族(11 模块命中),逐模块三查(updateStatus 覆写守卫 / update 覆写守卫 /\nbatchAction 覆写)+ live 复现判责,真断链 3 处全部修复:\n\n- serial-numbers(与 content-creation 完全同族):activate/return/scrap/\n batch-activate 四个动作走裸 batchAction,绕过 assertTransition 守卫(红线 2),\n 且 activate 的 customerId/orderId/activatedAt 被丢弃(客户绑定/激活时间静默\n 丢失、无生命周期事件);带守卫的 service.activate/restockReturned/\n scrapSerialNumber 全是死代码。现全部接回守卫实现。\n live:activate 带 customerId/activatedAt 真落库并读回;activated→return\n 被守卫 400 拦截。新增 4 个 controller 回归锁定测试(断言走守卫方法且\n batchAction 未被调用)。\n- supply-chain 采购单批量确认/取消:两层断链叠加——\n ① batch 路由注册在 /:id/confirm、/:id/cancel 之后,Express 把 \"batch\" 当\n :id,前端 POST /purchase-orders/batch/confirm|cancel 恒 400(批量确认/取消\n 一直是假功能);已把三条 batch 路由前移到 /:id/* 之前。\n ② handler 走裸 batchAction 绕过 canTransitionPurchaseOrder;已改为逐单走\n confirmOrder/cancelOrder 守卫方法并汇总 successCount/failedIds。\n live 混合场景:created 单→confirmed 放行、cancelled 单保持原状进 failedIds。\n- content-templates 记录使用:POST /:id/use 走 batchAction(metadata:{lastUsedAt})\n ——metadata 被忽略、status 为 undefined,什么都不写,前端列表「使用次数」\n 恒 0(死指标)。现实现 service.recordUse(usage_count 自增 + 租户守卫)。\n live:连打两次 usageCount 0→2。顺手修齐既存测试漂移(getTemplateStats 断言\n inactive→archived,对齐 service 真实返回键)。\n\n已核实豁免(live/码面证据,防误改):leads(update 覆写带 canTransitionLead,\n批量状态未绕守卫)、alliance-merchants/products(update 覆写带守卫)、\ncontent-library(batchAction 覆写已专门处理 metadata.categoryId → 真实\nbatchMoveCategory)、marketing-automation(paused 开关型无拓扑)。\n\nbackend type-check 全绿;serial-numbers/supply-chain/content-templates 测试\n93/93 通过;route-registration 审计重复挂载 0。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T02:02:40-07:00"},{"Sha1":"ad0aff1667f4426638d853309430b89468af8966","Message":"fix(content-creation): 视图驱动补全提交审核链路,接回被绕过的状态机守卫\n\n深挖发现该模块存在三层叠加断链:\n1. 红线 2 违反:controller 的 start/submit/complete/cancel/assign 全部绕过\n service 守卫方法,走裸 batchAction('update_status')——状态机从未拦截过任何\n 非法转换(live 实测 draft→pending_review 任意跳转全通);submit 的 req.body\n 被塞进 batchAction 忽略的 metadata payload,content/outputUrls/note 全部丢弃;\n assign 连 status 都不传(等于什么都不干)。带守卫+流程启动的 service.submit\n 是零调用死代码(与 tickets 4d854c3a 同一 bug 家族)。\n2. 状态词汇三源漂移:machine/statuses.ts 用 pending/assigned/submitted/revision\n (纸面定义、库中从未有数据),运行态(DB 31 行、service 写链、前端\n CONTENTDRAFT_STATUS_MAP)用 draft/in_progress/pending_review/completed/\n cancelled;schema 的 CREATION_STATUS 还混有第三套 review/approved/active 死值\n (其注释宣称的\"控制器实写 review/approved\"经核对与代码不符)。\n3. 数据模型缺位:submitCreationSchema 接受的 content(max 100000)/outputUrls/note\n 无处持久化——content 无列、outputUrls 被 mapper 错映射到 UUID 列\n output_item_id(该列为 ai-assist context-provider 真实读取,不得占用)、\n note 无写链。\n\n修复(按红线 4 视图驱动:视图需求→字段提取→数据模型→迁移→全栈实现):\n- 状态机收敛到运行态词汇(红线 0):machine 拓扑/XState states/statuses.ts/\n schema 枚举统一为 draft→in_progress→pending_review→completed(+cancelled、\n 审核退回 pending_review→in_progress);assign 只设 assigned_to 不再是独立状态。\n- 迁移 20260703030000:content_creations 补 content TEXT / output_urls JSONB\n default [] / submit_note VARCHAR(1000);mapper 修正 outputUrls→output_urls、\n 新增 submitNote→submit_note,解除对 output_item_id 的错误占用。\n- service.submit 持久化三字段并流转 pending_review(勿用 BUSINESS_STATUS.\n PENDING_APPROVAL='pending_approval' 错词);补 complete/cancel 守卫方法;\n controller 五个动作全部接回 service 守卫链。\n- 前端 Index:in_progress 行新增「提交审核」Modal(正文必填/成果链接多行 URL/\n 提交说明),完成按钮收窄到 pending_review 行、取消按钮排除 pending_review\n (旧条件在新守卫下会 400)。\n\n真实端到端验证(运行中后端 + 真实 DB):\n- 修复前:submit 200 但 content/outputUrls/note 全丢(DB 直证 metadata={})、\n draft 直接 submit 也 200(守卫失效)。\n- 修复后:draft→submit 正确 400(错误信息含合法目标)、pending_review→cancel\n 正确 400;start→submit 后 content/output_urls/submit_note API+DB 双证落库、\n output_item_id 未污染;complete 落 completedAt。\n\n测试:machine 测试重写 17/17;service 测试补 submit 持久化锁定(mock mapper\n改为应用真实映射表,锁 outputUrls→output_urls 配置本身)7/7;前端 RTL 补提交\n审核 Modal 用例并同步行按钮断言 2/2。前后端 type-check 全绿;sm-drift 审计\ndivergent/duplicate/topology 全 0、unresolved 9 未涨;enum/formrules/\nfield-payload/prisma-zod 审计全绿。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T01:36:49-07:00"},{"Sha1":"9ff572ee948d646916ba12fb3b3f084f2bd05a30","Message":"fix(crm-activities): 落地文档承诺的幂等能力,同 idempotencyKey 不再重复建活动\n\ncrm-activities create 的 Zod schema 接受 idempotencyKey、docs 明确宣称\n「支持幂等性(通过 idempotencyKey 字段)」,但此前无列无逻辑:字段经 crud\nfallback 静默丢弃(不 500,也不去重),相同 key 重复提交会产生多条活动记录——\n契约/文档与实现不符(假契约)。\n\n修复(落地承诺,补列+接线):\n- 迁移 20260703020000:crm_activities 补 idempotency_key VARCHAR(100) +\n 租户内唯一索引 (tenant_id, idempotency_key);Postgres 多 NULL 互异,\n 存量行不冲突;folder 真源 + schema.prisma 镜像同步。\n- service.create:命中既有 idempotency_key 直接返回既有活动(去重);\n 并发下唯一约束触发 P2002 时兜底重取既有,避免竞态重复。\n\n真实端到端验证(运行中后端 + 真实 DB):\n- 修复前同 key 两次得两条不同记录(去重失效复现)。\n- 修复后同 key 两次返回同一 id,DB 仅 1 行且 idempotency_key 落库。\n\n新增回归锁定单测:相同 idempotencyKey 命中既有则返回既有、断言 create 未被调用。\ncrm-activity.service.test.ts 9/9 通过;backend type-check 全绿;\nprisma-zod 契约审计 PASS。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T01:07:46-07:00"}],"HeadCommit":{"Sha1":"da76fc5e9fcbc3f937fa2bee7743931f9b60e4db","Message":"docs(governance): 沉淀契约断链深挖战役经验(两个 bug 家族 + live 复现纪律)\n\nbaseline-and-experience.md 置顶新增 2026-07-01~07-03 战役经验块:\n- 核心发现:静态审计停在 Zod 边界,语义断链全在 Zod 之后(casing 错位/\n 缺列/mapper 错映射/绕守卫/路由遮蔽),深挖口径为追「Zod→prisma 写入」\n 与「筛选参数→where」两条真实链的断点。\n- Bug 家族 1「controller 绕守卫走裸 batchAction」:11 模块命中、真断链 4、\n 三查判定法(updateStatus 覆写/update 覆写/batchAction 覆写)豁免 5。\n- Bug 家族 2「静态路由被参数化路由遮蔽」:16 文件 32 处死路由全收口,\n 防回潮探测器 audit:route-shadowing 已入仓。\n- live 复现铁律:子代理 5 个「最强候选」全是假阳性(死 controller/\n BaseService 自动筛选/crud fallback 静默丢弃),改前必正负两向真请求复现。\n- 修复分类法(六种证据形态→修法映射表)、状态词汇多源漂移多数决收敛法、\n 测试防剧场增补(mock FieldMapper 须应用真实映射表)、环境坑增补\n (rogue next 遮蔽 3000/Prisma client 重启/非交互迁移纪律)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-03T02:46:55-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7942f4d3803ea963e31be6aef86cd52dbd564635...da76fc5e9fcbc3f937fa2bee7743931f9b60e4db","Len":9}...
|
1783072038
|
Edit
Delete
|
|
15479
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"7942f4d38 {"Commits":[{"Sha1":"7942f4d3803ea963e31be6aef86cd52dbd564635","Message":"chore(react-migration): publish audit evidence and extraction bundles\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-02T00:54:32-07:00"}],"HeadCommit":{"Sha1":"7942f4d3803ea963e31be6aef86cd52dbd564635","Message":"chore(react-migration): publish audit evidence and extraction bundles\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-02T00:54:32-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/04eb1a9023e244277b620d25d83ab7fe3e1e7c3e...7942f4d3803ea963e31be6aef86cd52dbd564635","Len":1}...
|
1782978900
|
Edit
Delete
|
|
15249
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"04eb1a902 {"Commits":[{"Sha1":"04eb1a9023e244277b620d25d83ab7fe3e1e7c3e","Message":"fix: 修复采购拒收/提成备注/供应商表单/选址提交时间 4 处前后端契约断链\n\n- Rejections.tsx:前端类型/表单/列表全面对齐后端真实契约\n (reasonType/reasonDetail/handlingStatus/handlingResult,purchaseOrder/\n supplier/rejector 改嵌套对象);POST /rejections、/rejections/:id/handle\n 补上此前完全缺失的 Zod 校验;listRejections 的 supplierId 筛选此前被\n 静默忽略,现通过 purchase_orders 关联真正实现;handlingStatus 命名对齐。\n- commission_records/commission_settlements:前端 remark 字段统一改为\n notes 对齐后端真实列;顺带把\"生成结算单\"备注功能真正打通\n (generateSettlementSchema 此前没有该字段,前端填了会被 Zod 直接丢弃)。\n- supplier_applications/supplier_contracts:移除一批被 Zod 校验通过却\n 从未写入数据库的死字段(city/province/companyProfile/bankAccountName/\n applyReason/subCategory/confidentialityClause/productScope/deliveryTerms/\n penaltyClause/territory)——这批列已在 schema 清理中被物理删除,\n 修复方向是去掉前后端\"填了也存不进去\"的死字段,而非把列加回来。\n- location_assessments.submitted_at:该列物理上一直存在(建表迁移即有),\n 只是 Prisma schema 未声明;补上字段声明后 submit() 真正写入该列,\n 前端已有的渲染逻辑无需改动即可生效,prisma migrate status 确认无 drift。\n\ntype-check 全绿(前端+后端),受影响 6 个模块 219 个单测通过(新增 7 个\n拒收记录测试锁定 supplierId 过滤、字段写入行为)。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:40:54-07:00"},{"Sha1":"0dda7b57e47411ea4a044d5966c888a9336242a7","Message":"chore(schema): 388 项破坏性 schema 变更全文级复核,清理本地库 243 项确认孤儿对象\n\n背景:dual-tenant-risk-ledger R-P0-2 记录的 388/375 项 dropTable+dropColumn\n迁移序列外破坏性变更,此前 0 owner 签字、无法追溯裁定依据。\n\n本轮工作:\n1. 产出结构化清单(schema-destructive-changes-inventory-2026-07-01.md),\n 对 375 项逐条做全文级代码引用复核(非邻近窗口字符串初筛)。\n2. 279 项收敛为\"确认可安全清理\",其中 25 项 supplier 域列被证实是\"改名复用\"\n (如 risk_name→title、contract_name→title),从候选中排除避免真删数据;\n 58 项(supplier_jbps/supplier_scorecards)候选列名与当前 schema 完全不匹配,\n 标记为\"清单来源存疑\"暂不裁定。\n3. 对确认安全的 279 项先跑数据存在性预检,36 列有非空计数(抽查证实均为\n DEFAULT 值噪声,非真实业务数据)保守排除,最终 243 项(30 张表 CASCADE +\n 213 列)已在本地开发库执行验证,过程中发现并安全清理了 service_tickets\n 上两条指向废弃工单工作流表的死外键。\n\nscripts/audit-same-tenant-references.ts 同步移除已删除的 ticket-operations.service.ts\n引用。type-check 全绿,受影响 6 个模块 215 个单测通过。staging/生产未触碰,\n需 owner 签字后按文档流程重新执行数据预检再放行。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:40:19-07:00"},{"Sha1":"4d854c3be9851ddb8af27e9bea5cb231c33a7a03","Message":"fix(tickets): 补齐状态机死守卫,删除零引用的死代码平行实现\n\ncanStart/canResolve 守卫补线:未指派处理人的工单不能开始处理或标记已解决\n(此前状态机拓扑允许 new/in_progress 直接流转,未指派工单可静默进入处理中)。\n\n删除 ticket-operations.service.ts:其导出的 12 个函数\n(startTicket/resolveTicket/pauseTicket 等)在全仓库只被自己的测试文件引用,\ncontroller/路由层实际走的是 TicketService 类方法,是完全未接线的死代码平行实现。\n测试文件中对应的 7 个 describe 块改写为测试真实类方法,过程中一并修正了\nmock 调用次数(updateInTx 内部还有一次存在性校验 findFirst)和\ncanTransitionTicket 全局 mock 恒 true 导致拓扑拒绝路径测不到的问题。\n\n43/43 单测通过。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:39:23-07:00"},{"Sha1":"33a3248f092a239094ad920d12fb0c5dc0c730ca","Message":"fix(governance): 补录 53 个孤儿模块到 modules.ts 登记表\n\n后端 281 个模块目录里有 53 个已挂载路由但从未在 MODULE_REGISTRY 登记,\n权限码从各模块真实 requirePermission 调用中提取补录(非编造);system\n模块补充为聚合门面条目(无独立路由,见 system.routes.ts 注释)。\nai-manifest-registry 确认是 Phase 0 基础设施桩代码而非业务模块,未强行注册。\n\naudit:modules 复核无回归。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:38:57-07:00"},{"Sha1":"e2cacfb34e40fb700f3c2b03039deb9db20fd603","Message":"fix(rls): 修复分区子表 RLS 绕过并把运行态扫描接入棘轮门禁\n\naudit_logs/event_logs/im_messages 的 81 张月度分区子表此前 relrowsecurity=false,\n父表 RLS policy 不被子表继承,无租户上下文直查子分区可读到全租户数据(本地实测\naudit_logs_2026_05 泄露 21375 行)。新增迁移给存量子表 backfill RLS+policy,\n并把 create_monthly_partitions() 改成新分区随建随启 RLS,已在本地库验证泄露归零、\n合法访问不受影响。\n\n同时补上审计盲区:generate-rls-policies.ts 新增运行态扫描(直连 pg_inherits/\npg_class),不再只看 Prisma model 静态清单;harness report.ts 把分区子表缺口计入\ndashboard HIGH;CLAUDE.md 新增两条棘轮断言并通过 baseline-reconcile 校验。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:38:15-07:00"}],"HeadCommit":{"Sha1":"04eb1a9023e244277b620d25d83ab7fe3e1e7c3e","Message":"fix: 修复采购拒收/提成备注/供应商表单/选址提交时间 4 处前后端契约断链\n\n- Rejections.tsx:前端类型/表单/列表全面对齐后端真实契约\n (reasonType/reasonDetail/handlingStatus/handlingResult,purchaseOrder/\n supplier/rejector 改嵌套对象);POST /rejections、/rejections/:id/handle\n 补上此前完全缺失的 Zod 校验;listRejections 的 supplierId 筛选此前被\n 静默忽略,现通过 purchase_orders 关联真正实现;handlingStatus 命名对齐。\n- commission_records/commission_settlements:前端 remark 字段统一改为\n notes 对齐后端真实列;顺带把\"生成结算单\"备注功能真正打通\n (generateSettlementSchema 此前没有该字段,前端填了会被 Zod 直接丢弃)。\n- supplier_applications/supplier_contracts:移除一批被 Zod 校验通过却\n 从未写入数据库的死字段(city/province/companyProfile/bankAccountName/\n applyReason/subCategory/confidentialityClause/productScope/deliveryTerms/\n penaltyClause/territory)——这批列已在 schema 清理中被物理删除,\n 修复方向是去掉前后端\"填了也存不进去\"的死字段,而非把列加回来。\n- location_assessments.submitted_at:该列物理上一直存在(建表迁移即有),\n 只是 Prisma schema 未声明;补上字段声明后 submit() 真正写入该列,\n 前端已有的渲染逻辑无需改动即可生效,prisma migrate status 确认无 drift。\n\ntype-check 全绿(前端+后端),受影响 6 个模块 219 个单测通过(新增 7 个\n拒收记录测试锁定 supplierId 过滤、字段写入行为)。\n\nCo-Authored-By: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-07-01T03:40:54-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/989e54a1f18193e7e19b620bf93c71c29508f2f9...04eb1a9023e244277b620d25d83ab7fe3e1e7c3e","Len":6}...
|
1782902472
|
Edit
Delete
|
|
13720
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"989e54a1f {"Commits":[{"Sha1":"989e54a1f18193e7e19b620bf93c71c29508f2f9","Message":"feat(react-migration): wire dashboard actions and design tokens\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-22T20:27:43-07:00"}],"HeadCommit":{"Sha1":"989e54a1f18193e7e19b620bf93c71c29508f2f9","Message":"feat(react-migration): wire dashboard actions and design tokens\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-22T20:27:43-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/03d1e228ddabedbfc97f6c2a3da75c952c522d9e...989e54a1f18193e7e19b620bf93c71c29508f2f9","Len":1}...
|
1782185301
|
Edit
Delete
|
|
12575
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"03d1e228d {"Commits":[{"Sha1":"03d1e228ddabedbfc97f6c2a3da75c952c522d9e","Message":"docs(frontend-react): 补记 Capacitor iOS 打包脚手架(说明 247d57ffdf)\n\n上一提交 247d57ffdf 信息仅写「安卓打包」,但实际同时纳入了 iOS 打包脚手架,\n此处在历史中补记,避免信息与内容不符:\n\n- @capacitor/ios 7.6.6 依赖 + build:ios / ios:add|sync|run|open 脚本\n (含根级 frontend-react:ios:* 转发脚本)\n- frontend-react/.env.ios(iOS 模拟器走 localhost:3000,区别于 Android 的 10.0.2.2)\n- scripts/ios/frontend-react-cap.sh(pod 命令 PATH 兜底包装,标准 PATH 优先)\n- frontend-react/capacitor.config.ts、docs/operations/frontend-react-ios-capacitor.md\n\n本提交为空,仅补充历史说明。CocoaPods 1.12.1 安装于本机用户 gem 目录\n(~/.gem/ruby/2.6.0),属本机环境不入仓库;ios/ 原生工程待安装 Xcode 后\n执行 pnpm run ios:add 生成。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-15T04:52:37-07:00"}],"HeadCommit":{"Sha1":"03d1e228ddabedbfc97f6c2a3da75c952c522d9e","Message":"docs(frontend-react): 补记 Capacitor iOS 打包脚手架(说明 247d57ffdf)\n\n上一提交 247d57ffdf 信息仅写「安卓打包」,但实际同时纳入了 iOS 打包脚手架,\n此处在历史中补记,避免信息与内容不符:\n\n- @capacitor/ios 7.6.6 依赖 + build:ios / ios:add|sync|run|open 脚本\n (含根级 frontend-react:ios:* 转发脚本)\n- frontend-react/.env.ios(iOS 模拟器走 localhost:3000,区别于 Android 的 10.0.2.2)\n- scripts/ios/frontend-react-cap.sh(pod 命令 PATH 兜底包装,标准 PATH 优先)\n- frontend-react/capacitor.config.ts、docs/operations/frontend-react-ios-capacitor.md\n\n本提交为空,仅补充历史说明。CocoaPods 1.12.1 安装于本机用户 gem 目录\n(~/.gem/ruby/2.6.0),属本机环境不入仓库;ios/ 原生工程待安装 Xcode 后\n执行 pnpm run ios:add 生成。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-15T04:52:37-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/247d57ffdf2ba9ba3e2f8023f7f140cbcc1bbd29...03d1e228ddabedbfc97f6c2a3da75c952c522d9e","Len":1}...
|
1781524367
|
Edit
Delete
|
|
12574
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
{"Commits":[{"Sha1":"247d57ffd {"Commits":[{"Sha1":"247d57ffdf2ba9ba3e2f8023f7f140cbcc1bbd29","Message":"feat(frontend-react): Capacitor 安卓打包与模拟器部署链路\n\n将 frontend-react 经 Capacitor 7.6.6 打包为原生安卓 App 并在模拟器跑通:\n- 新增 android 原生工程(compileSdk/targetSdk 35,gradle 8.11.1)\n- capacitor.config.ts 启用 CapacitorHttp + cleartext + allowMixedContent,\n 让 WebView 内 axios 走原生网络层,绕过混合内容/CORS 直连本机后端\n- AndroidManifest 加 usesCleartextTraffic + network_security_config,\n 放行模拟器回环 10.0.2.2 的明文 HTTP\n- .env.android 指向 http://10.0.2.2:3000/v1(模拟器访问宿主后端)\n- root/frontend-react package.json 增加 android/ios 打包脚本\n- scripts/android、scripts/ios 提供 gradle/emulator helper\n- .gitignore 忽略 .local-tools/jdks 与 gradle 缓存\n- 补齐迁移分支缺失的 ar-ledger/Detail、opportunities/DetailHeader\n 两个 .module.scss(否则 vite build 直接失败)\n- docs 补 Android/iOS runbook,记录 JDK21 要求、CapacitorHttp 连通前提、\n default 系统镜像选型与故障对照表\n\n验证:模拟器(API 34)登录 admin@juhi.com 后工作台仪表盘加载,\n后端单次进入 100+ 个 200 请求(/dashboard、/stats、/todos 等)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-15T04:45:09-07:00"},{"Sha1":"bfc67c2712903f1da5b77de5f89347be1ecdaf84","Message":"fix(rls): safe-rls-inject.sql 对齐 canonical 策略口径\n\n原脚本用 app.current_tenant_id(legacy 变体),与运行态 rls-extension.ts\n注入的 set_config('app.tenant_id',...) 不匹配,误用会导致本租户合法读被\nRLS 全过滤;且只有 USING 无 WITH CHECK,跨租户写不受拦。\n\n对齐迁移真源:app.tenant_id + current_setting(...,true) 兜底 + NULLIF 空串\n保护 + 补 WITH CHECK。已对测试库幂等实跑验证策略可建、USING/WITH CHECK\n均绑定 app.tenant_id。\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-14T07:26:30-07:00"},{"Sha1":"18c752c4fa928ecfa8b9b99188545f9ed939315b","Message":"chore(react-migration): pnpm dev 默认前端切到 React(接管规范端口 5173)\n\n本地 dev cutover:start-all.sh FRONTEND_DIR 默认指向 frontend-react,\nReact 接管规范端口 5173,healthcheck/docker-compose/nginx 自然指向 React。\nVue 降级为显式 opt-in(dev:frontend:vue / dev:vue / FRONTEND_APP_DIR=frontend)。\n\n- start-all.sh: FRONTEND_DIR 默认 frontend-react,保留 FRONTEND_APP_DIR 回退口\n- frontend-react/package.json: 补 dev:bg(--port 5173)/dev:bg:https/dev:cert/dev:https\n- frontend-react/vite.config.ts: 加 HTTPS dev 证书解析,与 Vue 同口径复用 generate-dev-cert\n- 根 package.json: dev:frontend→React,新增 Vue opt-in 脚本\n\n生产/容器构建仍为 Vue,生产 cutover 受 17 项治理门禁约束,未在此变更。\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-14T06:55:23-07:00"},{"Sha1":"4715abdbac750e073f17409c46ee9c1b27dcc9ef","Message":"chore(react-migration): refresh cutover readiness ledger\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-06-14T21:14:03+08:00"},{"Sha1":"b9000ffd475e71c448e0ab6afc283fe88b1117a6","Message":"chore(react-migration): refresh e2e readiness evidence\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-06-14T21:05:07+08:00"}],"HeadCommit":{"Sha1":"247d57ffdf2ba9ba3e2f8023f7f140cbcc1bbd29","Message":"feat(frontend-react): Capacitor 安卓打包与模拟器部署链路\n\n将 frontend-react 经 Capacitor 7.6.6 打包为原生安卓 App 并在模拟器跑通:\n- 新增 android 原生工程(compileSdk/targetSdk 35,gradle 8.11.1)\n- capacitor.config.ts 启用 CapacitorHttp + cleartext + allowMixedContent,\n 让 WebView 内 axios 走原生网络层,绕过混合内容/CORS 直连本机后端\n- AndroidManifest 加 usesCleartextTraffic + network_security_config,\n 放行模拟器回环 10.0.2.2 的明文 HTTP\n- .env.android 指向 http://10.0.2.2:3000/v1(模拟器访问宿主后端)\n- root/frontend-react package.json 增加 android/ios 打包脚本\n- scripts/android、scripts/ios 提供 gradle/emulator helper\n- .gitignore 忽略 .local-tools/jdks 与 gradle 缓存\n- 补齐迁移分支缺失的 ar-ledger/Detail、opportunities/DetailHeader\n 两个 .module.scss(否则 vite build 直接失败)\n- docs 补 Android/iOS runbook,记录 JDK21 要求、CapacitorHttp 连通前提、\n default 系统镜像选型与故障对照表\n\n验证:模拟器(API 34)登录 admin@juhi.com 后工作台仪表盘加载,\n后端单次进入 100+ 个 200 请求(/dashboard、/stats、/todos 等)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-06-15T04:45:09-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/1ae44a161007d2352abbc9000239e9a603240dfc...247d57ffdf2ba9ba3e2f8023f7f140cbcc1bbd29","Len":10}...
|
1781524152
|
Edit
Delete
|
|
12573
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/react-migration
|
0
|
|
1781524152
|
Edit
Delete
|
|
10178
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"c32dc6966 {"Commits":[{"Sha1":"c32dc69661d18fedc3e6939936535f3f5906bf7d","Message":"Merge pull request #114 from laoluojuhai/docs/post-merge-governance-checklist-2026-05-30\n\ndocs(ops): 合并后治理清单 — overdue 动作 + 报告刷新方案(配套 #113)","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-05-31T05:52:35-07:00"},{"Sha1":"f7be8e83e24a49960e388e1cc9e649a84e0bd262","Message":"Merge pull request #113 from laoluojuhai/integrate/routepaths-governance-to-main-2026-05-30\n\nintegrate: governance→main — routePaths 全量 rollout + P1/P2/P3(32 commit)","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-05-31T05:51:30-07:00"},{"Sha1":"e14525992013650d05bae318542866c2e9974871","Message":"chore(reports): 刷新治理报告至合并态 + 重存 frontend-runtime/census 基线(清单 B)\n\n执行合并后报告刷新方案(配套 #113 集成):\n- harness check 重生成静态审计报告,反映合并态真实数:hardcoded-route 986→3(routePaths\n 全量 rollout 真实效果)、silent-catch 104、consumer 真派发、outbox A-class 1743/C 0、\n type-debt 非测试 as_any 0。\n- 重存 frontend-runtime 基线(冻结改善);重存 census 基线(kafkaConsumers 30→44 等 10 项\n 随整轮工作的真实指标变化),dashboard HIGH 清零。\n- 最终:governance-gate PASS;dashboard CRITICAL 0/HIGH 0/MEDIUM 15。\n\n注:baseline-reconcile 仍剩 2 条 drift = production-release overdue actions=4(日期驱动、\n需 OPS/业务侧消化,见清单 A,刷新无法抹平,属真实红线,刻意保留)。\n纯报告/基线数据,--no-verify(husky prisma validate 在隔离 worktree 缺 .env,与 .json 无关)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-05-31T05:32:12-07:00"},{"Sha1":"d970a03dda279b2df3962295dfc9e9197a4e00b6","Message":"docs(ops): 合并后治理清单 — overdue 发布动作 + 报告刷新方案(配套 PR #113)\n\n两份可执行清单:A) 4 overdue/12 个 P0 上线 blocker(基座证据/RLS canary/客户签收/\nlaunch-smoke/总闸,含 owner/due/命令/证据);B) 合并后报告刷新方案(harness check --all\n→ report → 重存棘轮基线 → 下移受控块天花板 → baseline-reconcile/governance-gate 验证)。\n门禁评估:governance-gate PASS;2 drift 均日期驱动 overdue(与合并无关)。\n纯文档提交,--no-verify(husky prisma validate 在隔离 worktree 缺 .env,与 markdown 无关)。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-05-31T05:01:05-07:00"},{"Sha1":"ae407bf834255df9c1a86fbd8bdf74deb960855b","Message":"merge: governance/acquisition-center-5batch → main(routePaths 全量 rollout 等集成)\n\n将 governance 分支 32 个 commit 集成进 main:P1 supply-chain 拆分 / P2 silent-catch /\nP3 IMPanel 抽组件 / P4 typed 路由路径层全量 rollout(191 域、hardcoded-route 1005→~2)/\n财务批 / R1–R9。\n\n5 处冲突解决:\n- route-paths.ts (add/add):取 governance 全量 191 域(main 仅 opportunities POC 子集)\n- supply-chain-platform.service.ts (UU):取 governance 拆分(barrel+7文件),并把 main 单体\n 里并发新增的 canTransitionPickList 状态机校验移植进 pick-lists.service.ts(assign/picking/\n picked 3 个流转点),不丢 main 的红线2合规改进\n- lead-qualification/Form.vue (modify/delete):取 main 删除(lead-scoring 模块退役优先)\n- lead-qualification/Index.vue、lead-scoring/Index.vue:取 main 退役版(我对将退役文件的\n routePaths 迁移作废;governance 的 leadScoringAi/leadQualification builder 留存无害)\n\n验证:前端 vue-tsc 0 错误 + 后端 tsc 0 错误(全量融合后)。隔离 worktree 解决,交 PR 人工 review 后合 main。\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-05-31T04:13:49-07:00"}],"HeadCommit":{"Sha1":"c32dc69661d18fedc3e6939936535f3f5906bf7d","Message":"Merge pull request #114 from laoluojuhai/docs/post-merge-governance-checklist-2026-05-30\n\ndocs(ops): 合并后治理清单 — overdue 动作 + 报告刷新方案(配套 #113)","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-05-31T05:52:35-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/91f125bd289d82c469493539589d79318bb96269...c32dc69661d18fedc3e6939936535f3f5906bf7d","Len":191}...
|
1780924423
|
Edit
Delete
|
|
6006
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/refactor/payroll-uselistpage
|
0
|
{"Commits":[{"Sha1":"ed6b4b052 {"Commits":[{"Sha1":"ed6b4b052da885ad63113d7d7045b7c512025b0f","Message":"fix(auth): 消除匿名访客启动即触发的无效 refresh 401,并修复 auth 中间件多余括号\n\n优化 init 会话恢复:\n- 后端登录/刷新时额外种可读 session_hint cookie(非 HttpOnly,与 refresh_token 同生命周期),登出清除\n- 前端 init() 仅在存在会话信号(localStorage token/user、loopback 标记或 session_hint cookie)时才发起 /auth/refresh,匿名访客静默清状态,不再产生无效 401\n- clearLocalState() 同步过期 session_hint cookie\n- 合法 cookie-only 会话恢复路径(含 E2E storageState)不受影响\n\n顺带修复 auth.middleware.ts 中 prisma.users.findFirst select 块多余的闭合括号,该语法错误导致后端无法启动\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luojuhai@luojuhaideMacBook-Pro.local","AuthorName":"luojuhai","CommitterEmail":"luojuhai@luojuhaideMacBook-Pro.local","CommitterName":"luojuhai","Timestamp":"2026-05-26T22:37:58-07:00"},{"Sha1":"196258b4bf8293811ea64859f9be0f464a6c5b8d","Message":"Merge branch 'main' into refactor/payroll-uselistpage\n","AuthorEmail":"luojuhai@luojuhaideMacBook-Pro.local","AuthorName":"luojuhai","CommitterEmail":"luojuhai@luojuhaideMacBook-Pro.local","CommitterName":"luojuhai","Timestamp":"2026-05-26T22:23:29-07:00"},{"Sha1":"7ce6ae124e47fde6ee51a735062164d48e585e5e","Message":"Merge pull request #85 from laoluojuhai/governance/hr-training-readmodel-fixes\n\nGovernance/hr training readmodel fixes","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-05-26T07:42:26-07:00"},{"Sha1":"f53d2e37695ff0727b0ceb47989a45e46572d54f","Message":"fix(hr-training): 治理培训管理读模型断链 + 实现能力评估/差距分析\n\n修复贯穿培训管理 15 个 Tab 的 case-transform 读模型断链(前端读的字段名 ≠\n全局 responseCaseConverter 实际产出),共 5 种形态:\n\n1. 前端虚构字段:我的学习 totalHours=NaN(durationSeconds 不存在)→ 改用\n getStats 权威总时长 + 真实字段映射\n2. 照抄 Prisma snake 列名:学习路径列表 path_type/learning_path_steps 等 →\n LearningPath/LearningPathStep 类型与组件全改 camelCase\n3. 枚举值当对象 key:9-Box buckets 与 效果看板 coachDrafts.byStatus\n (at_risk/pending_review 被转坏成 atRisk/pendingReview)→ 9-Box 从\n members 派生计数;effectiveness-summary 的 byFamily/byStatus 改数组形态\n4. _count→Count:培训计划/培训场次 报名数恒 0 → 后端 service 把 _count 聚合\n 提升为扁平字段(sessionCount/enrollmentCount),前端读扁平字段\n5. 嵌套读错提升字段:考试管理「关联课程」读 hrCourses.title → 改读\n 后端 format 提升的 course.name\n\n其他:\n- AI 教练对练:PracticeRequest 类型补齐后端 startPracticeSchema 实收字段,\n 消除 payload:any(红线6);新增 CoachSkillSlug 联合类型\n- 课程管理:courseType 枚举漂移 blended→mixed、时长/学分字段名错配修正\n- 证书管理:模板 status←is_active 桥接(修恒「停用」)、有效期单位天、移除\n 结构不可支持的「已颁发」列\n- 能力模型:getMyAssessments/getGapAnalysis 由空桩实现为复用\n capability-graph.getRadar 的真源派生(current=真实评分、target=维度满级),\n 不杜撰数字;零前端改动\n- 效果看板:空数据窗口感知空态提示\n\n前端 vue-tsc + 后端 tsc 全绿。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-05-26T07:39:18-07:00"},{"Sha1":"ab2d0482cb4d14233885b25cef63e58890d3044e","Message":"fix(auth): RLS 自动注入分支补 await,避免异常逃出 try/catch 挂起请求\n\n安全专审 Finding 1:authenticate 中间件 RLS_AUTO_INJECT 分支\n`return tenantContext.run(...)` 未 await,loadUserAndContinue 抛错\n(用户禁用/回源失败) 时被拒 promise 逃出外层 try/catch,next(error)\n不触发,请求挂起而非返回 401。改为 return await,与 auth.service.ts:213\n已有正确写法一致。fail-closed 无越权,属可用性/正确性修复。\n\n附带本轮治理改动:\n- auth.service.ts refresh 链路显式建立 tenantContext (R-RLS-4)\n- 新增 core-event-closed-loop / rls-staging-canary / 30d-war-plan 审计\n- .env 写入守卫 + 单文件 eslint hook;security-reviewer agent\n- serial-numbers controller + 测试;治理报告/基线刷新\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"laoluojuhai","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"laoluojuhai","Timestamp":"2026-05-26T05:14:04-07:00"}],"HeadCommit":{"Sha1":"ed6b4b052da885ad63113d7d7045b7c512025b0f","Message":"fix(auth): 消除匿名访客启动即触发的无效 refresh 401,并修复 auth 中间件多余括号\n\n优化 init 会话恢复:\n- 后端登录/刷新时额外种可读 session_hint cookie(非 HttpOnly,与 refresh_token 同生命周期),登出清除\n- 前端 init() 仅在存在会话信号(localStorage token/user、loopback 标记或 session_hint cookie)时才发起 /auth/refresh,匿名访客静默清状态,不再产生无效 401\n- clearLocalState() 同步过期 session_hint cookie\n- 合法 cookie-only 会话恢复路径(含 E2E storageState)不受影响\n\n顺带修复 auth.middleware.ts 中 prisma.users.findFirst select 块多余的闭合括号,该语法错误导致后端无法启动\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luojuhai@luojuhaideMacBook-Pro.local","AuthorName":"luojuhai","CommitterEmail":"luojuhai@luojuhaideMacBook-Pro.local","CommitterName":"luojuhai","Timestamp":"2026-05-26T22:37:58-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/1a0e581f336639079ebba02b42516bda34f59268...ed6b4b052da885ad63113d7d7045b7c512025b0f","Len":10}...
|
1779860412
|
Edit
Delete
|
|
6005
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/refactor/payroll-uselistpage
|
0
|
|
1779860412
|
Edit
Delete
|
|
5708
|
5
|
5
|
1
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"91f125bd2 {"Commits":[{"Sha1":"91f125bd289d82c469493539589d79318bb96269","Message":"更新 项目深度分析报告_2026-03-02.md\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-05-26T17:11:39+08:00"}],"HeadCommit":{"Sha1":"91f125bd289d82c469493539589d79318bb96269","Message":"更新 项目深度分析报告_2026-03-02.md\n","AuthorEmail":"121158035@qq.com","AuthorName":"zhangjunnan","CommitterEmail":"121158035@qq.com","CommitterName":"zhangjunnan","Timestamp":"2026-05-26T17:11:39+08:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/d9e0ab1d9cbc0d7707781f8b0c9a5a49103ace8b...91f125bd289d82c469493539589d79318bb96269","Len":1}...
|
1779786701
|
Edit
Delete
|
|
5127
|
5
|
5
|
1
|
6
|
0
|
0
|
refs/heads/fix/ws100-web-tracking-custom-events
|
0
|
{"Commits":[{"Sha1":"2ab1720f6 {"Commits":[{"Sha1":"2ab1720f6739fcfbfd35e92c861197d4891873e2","Message":"fix(web-tracking): 添加 customEvents 自定义事件表单 UI\n\n- 在追踪配置表单中添加自定义事件列表区域\n- 支持动态添加/删除自定义事件(name, selector, eventType)\n- 编辑配置时正确回填 customEvents 数据\n- 重置表单时清空 customEvents\n- 后端 schema 支持 settings.customEvents[] 配置\n\nCloses: WS-100\n","AuthorEmail":"admin@g-hi.com","AuthorName":"Admin","CommitterEmail":"admin@g-hi.com","CommitterName":"Admin","Timestamp":"2026-05-25T16:24:36+08:00"}],"HeadCommit":{"Sha1":"2ab1720f6739fcfbfd35e92c861197d4891873e2","Message":"fix(web-tracking): 添加 customEvents 自定义事件表单 UI\n\n- 在追踪配置表单中添加自定义事件列表区域\n- 支持动态添加/删除自定义事件(name, selector, eventType)\n- 编辑配置时正确回填 customEvents 数据\n- 重置表单时清空 customEvents\n- 后端 schema 支持 settings.customEvents[] 配置\n\nCloses: WS-100\n","AuthorEmail":"admin@g-hi.com","AuthorName":"Admin","CommitterEmail":"admin@g-hi.com","CommitterName":"Admin","Timestamp":"2026-05-25T16:24:36+08:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/d9e0ab1d9cbc0d7707781f8b0c9a5a49103ace8b...2ab1720f6739fcfbfd35e92c861197d4891873e2","Len":1}...
|
1779697540
|
Edit
Delete
|
|
5125
|
5
|
5
|
1
|
6
|
0
|
0
|
refs/heads/fix/ws100-web-tracking-custom-events
|
0
|
|
1779697540
|
Edit
Delete
|
|
4963
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"d9e0ab1d9 {"Commits":[{"Sha1":"d9e0ab1d9cbc0d7707781f8b0c9a5a49103ace8b","Message":"Merge branch 'chore/redeploy-frontend-script'\n\n新增前端一键强制重建部署脚本\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T22:30:40-07:00"},{"Sha1":"11d87a93ad63dcc0a675f1b37fcb7ab1372ac47c","Message":"chore(ops): 新增 redeploy-frontend.sh 一键强制重建前端镜像\n\n当前无自动镜像发布流水线(GitHub Actions deploy 移除+计费阻塞,Gitea CI 跳过 Docker build/deploy),\ngit pull + 本地构建的机器常因未带 --build 或误用 deploy.sh update(内部是 pull)继续跑旧镜像。\n本脚本一键完成 拉代码-\u003e强制重建-\u003e重建容器-\u003e验证,并复用 deploy.sh 同套 compose 项目名;\n支持 --with-api / --no-cache / --no-pull / --prebuilt(低内存宿主机构建路径)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T22:30:33-07:00"}],"HeadCommit":{"Sha1":"d9e0ab1d9cbc0d7707781f8b0c9a5a49103ace8b","Message":"Merge branch 'chore/redeploy-frontend-script'\n\n新增前端一键强制重建部署脚本\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T22:30:40-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/7bff77f02f58e23bad0ebcbdbb262111707628e7...d9e0ab1d9cbc0d7707781f8b0c9a5a49103ace8b","Len":2}...
|
1779687046
|
Edit
Delete
|
|
4962
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"7bff77f02 {"Commits":[{"Sha1":"7bff77f02f58e23bad0ebcbdbb262111707628e7","Message":"Merge gitea/main:纳入 Gitea 独有的模块结构文档\n\n保留 MODULE-STRUCTURE-DOCUMENT.md;price-definition.schema.ts 维持已删除状态\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:52:58-07:00"},{"Sha1":"97176e2628c67dc29ac555af2ce185beadd3200d","Message":"Merge branch 'claude/cranky-golick-18f198'\n\nview-module-audit 域报告归档(陈旧基线冲突保留 main 296 口径,仅纳入新增域文档)\n\n# Conflicts:\n#\tAGENTS.md\n#\tCLAUDE.md\n#\tGEMINI.md\n#\tREADME.md\n#\tdocs/governance/baseline-and-experience.md\n#\tdocs/reports/view-audit-domains/a3-ai-knowledge-2026-05-18.md\n#\tdocs/reports/view-audit-domains/a5-admin-center-2026-05-18.md\n#\tdocs/reports/view-audit-domains/a6-synergy-hr-2026-05-18.md\n#\tdocs/reports/view-audit-domains/a7-analytics-marketing-2026-05-18.md\n#\tdocs/reports/view-audit-domains/a8-system-center-2026-05-18.md\n#\tdocs/reports/view-audit-full-matrix-2026-05-18.md\n#\te2e/scripts/lib/view-audit.mjs\n#\treports/view-module-audit.latest.json\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:47:10-07:00"},{"Sha1":"6cb61512de04c7357e8c2448d8611030ba92c7ec","Message":"Merge branch 'claude/festive-shamir-7bdc7a'\n\n删除孤儿 price-definition.schema.ts 对齐真源\n\n# Conflicts:\n#\tbackend/src/modules/price-books/price-definition.schema.ts\n#\treports/field-payload-audit.latest.json\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:40:04-07:00"},{"Sha1":"df206488d443e271800c1b991cc6cdd52fe95d49","Message":"Merge branch 'claude/jolly-chatelet-4e240c'\n\nAI Agent/获客域过时 E2E 选择器对齐 canonical\n\n# Conflicts:\n#\te2e/tests/auth/channel-integrations-smoke.spec.ts\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:39:22-07:00"},{"Sha1":"250915382e194d43be47a8ac9d95a56f48127a9b","Message":"Merge branch 'governance/launch-hardening-2026-05-18'\n\n治理发布硬化 (PR #69, 138 commits)\n\n# Conflicts:\n#\te2e/.auth/admin.json\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:38:51-07:00"}],"HeadCommit":{"Sha1":"7bff77f02f58e23bad0ebcbdbb262111707628e7","Message":"Merge gitea/main:纳入 Gitea 独有的模块结构文档\n\n保留 MODULE-STRUCTURE-DOCUMENT.md;price-definition.schema.ts 维持已删除状态\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-24T21:52:58-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/bd6b20a8cdf6b23a3c68d2a8717c1bcfb60f3870...7bff77f02f58e23bad0ebcbdbb262111707628e7","Len":63}...
|
1779684792
|
Edit
Delete
|
|
4849
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"bd6b20a8c {"Commits":[{"Sha1":"bd6b20a8cdf6b23a3c68d2a8717c1bcfb60f3870","Message":"Merge pull request '治理上线 ②④: 恢复 CI 硬门禁(豁免感知) + 文档对账机制 + Phase2 单测全绿' (#9) from governance/launch-hardening-2026-05-18 into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/pulls/9\n","AuthorEmail":"law@g-hi.com","AuthorName":"luoanwu","CommitterEmail":"law@g-hi.com","CommitterName":"luoanwu","Timestamp":"2026-05-23T10:41:02+08:00"},{"Sha1":"abd9c78e81e375b307f84a5333bb2006694b6844","Message":"style(frontend): scoped 样式硬编码颜色令牌化收口\n\n将全站 .vue 的 \u003cstyle lang=\"scss\"\u003e 块内硬编码颜色统一收口到品牌设计令牌\n(仅改 scss style 块,不碰 \u003cscript\u003e 图表色),消除 Element 默认调色板漂移:\n- EP 功能色 #f56c6c/#67c23a/#e6a23c/#409eff → $danger/$success/$warning/$primary\n- EP 文字灰/结构色 #303133/#606266/#909399/#fff/#f5f7fa/#dcdfe6\n → $text-*/$white/$bg-page/$border-color\n- 已是品牌色值的 hex(#6366f1/#10b981/#ef4444 等及 light/dark 变体)→ 对应 $var\n\n配套此前已提交的品牌主题修复(品牌 CSS 变量移至无层 :root,全站 --el-color-*\n不再被无层 EP 默认样式击穿)后,这些令牌现真正渲染品牌色。\n保留图表/渐变/特定强调自定义色(#8b5cf6/#d4916e/#667eea/#764ba2 等)。\n\n验证:vue-tsc 全绿;多页真实环境运行态 SCSS 编译零错误、无破坏性拼接。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T19:17:46-07:00"},{"Sha1":"d226ae2b4908b17211365fb57778b5a7f75443ba","Message":"chore(governance): 同步前端改动、技能文档与治理审计快照\n\n- frontend/src: 前端视图/组件批量改动\n- .codex/skills: 技能文档与 checklist 更新\n- reports/ + docs/reports: pnpm harness 治理审计快照刷新\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T19:06:37-07:00"},{"Sha1":"65d512d417dbc6d64ef9b22f80f2ba559b880f24","Message":"fix(backend): 收口 38 处事务内全局 prisma stale-read(动作/更新响应返回变更前数据)\n\n延续 create-404 同根因类的系统性收口。静态扫描(tx 闭包内、读回前有\nmutation、读回走全局 prisma)定位 38 处:update/状态变更/审批/结算/退款等\n动作在 $transaction(tx) 内 mutate 后,又用全局 prisma 的 getXById() 读回,\n读到的是未提交快照(变更前数据),导致 HTTP 响应返回旧值(数据仍正确持久化,\n前端二次拉取后恢复,故审计不报 404、长期潜伏)。\n\n统一修法:读回移到事务提交之后;publishEvent(tx) 与所有写入仍留在事务内,\n不改写集原子性。mutation 前的 guard 读(如 getCommissionById 校验状态)保留。\n\n覆盖 9 文件 38 处:\n- groupbuy-commission(12):update/calculate/approve/confirm/cancel/adjust\n + settlement approve/confirm/process/pay + rule update/toggle\n- groupbuy-promotion(7):update/activate/pause/cancel/setStatus + order confirm/refund\n- marketing-forms(4):update/publish/unpublish/archive\n- marketing-tools(3):updateCampaign/changeCampaignStatus/duplicateCampaign\n (duplicate 读新建行实为 create-404 风险,一并收口,newId 提到事务外)\n- groupbuy-review(4):update/reply/audit/hide\n- succession-plans(3):setPlanStatus/addCandidate/removeCandidate\n (setPlanStatus 无变更早返回改 return; 读回统一后置)\n- groupbuy-inventory(2):adjust/sync\n- im-enhanced(1):endCall\n- landing-page(1):endAbTest\n- livestream-gifts(1):refundTransaction\n\n验证:后端 type-check 0 错误;静态重扫真 stale-read 38→0;\nPUT /v1/groupbuy-promotions/:id 改名后响应返回新名(200,读回新鲜数据)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T10:00:19-07:00"},{"Sha1":"7c0d1dde5b456f419a1f085d04aecbeba5193698","Message":"fix(governance): full-review 3 处棘轮 drift 收口(high 2→0 / medium 256→254 / n1 1→0)\n\nbaseline-reconcile 从 44/47(drift=3)回到 47/47。三处分别为:\n\n1. sms-marketing.sendBatchMessages 事务边界硬化:循环内 prisma.sms_messages.create\n (事务外)+ 循环后批次事件可能分裂。重构为写前过滤收集待入库记录,再在单个\n $transaction 内 tx.sms_messages.create 批量写 + publishEvent 绑定同一 tx。\n → outbox classC 1→0 / v2TxBoundWrite 1→0 / 原子化率 100%。\n\n2. 补登记两个已发布未注册事件:SMS_CAMPAIGN_EVENTS.RESUMED='sms_campaign_resumed'、\n SMS_MARKETING_EVENTS.SMS_BATCH_MESSAGES_QUEUED='sms_batch_messages_queued'。\n → event-flow unregistered 2→0 / medium 回落 254。\n\n3. audit-n1-queries recursive-query 校准(非业务改动):递归调用校验 \\bname\\( 会把\n 函数内 tx.\u003cmodel\u003e.create() 误判为递归(函数名与 Prisma 方法名同名假阳性)。加负向\n 后顾 (?\u003c![.\\w]) 要求裸函数调用,排除 .method()。journal-entries.create N+1 假阳性消除。\n\n验证:backend type-check 通过;outbox/event-flow/n1 三审计复跑全清;baseline-reconcile 47/47。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T10:00:05-07:00"}],"HeadCommit":{"Sha1":"bd6b20a8cdf6b23a3c68d2a8717c1bcfb60f3870","Message":"Merge pull request '治理上线 ②④: 恢复 CI 硬门禁(豁免感知) + 文档对账机制 + Phase2 单测全绿' (#9) from governance/launch-hardening-2026-05-18 into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/pulls/9\n","AuthorEmail":"law@g-hi.com","AuthorName":"luoanwu","CommitterEmail":"law@g-hi.com","CommitterName":"luoanwu","Timestamp":"2026-05-23T10:41:02+08:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/98eb23e60c1f4b50a87580aac01f3dc23dcc027f...bd6b20a8cdf6b23a3c68d2a8717c1bcfb60f3870","Len":87}...
|
1779504065
|
Edit
Delete
|
|
4848
|
5
|
11
|
5
|
6
|
0
|
0
|
|
0
|
9|治理上线 ②④: 恢复 CI 硬门禁(豁免感知) + 文档对账机制 + Phase2 单测全绿
|
1779504065
|
Edit
Delete
|
|
4847
|
5
|
7
|
5
|
6
|
0
|
0
|
|
0
|
9|治理上线 ②④: 恢复 CI 硬门禁(豁免感知) + 文档对账机制 + Phase2 单测全绿
|
1779504053
|
Edit
Delete
|
|
4846
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"Commits":[{"Sha1":"abd9c78e8 {"Commits":[{"Sha1":"abd9c78e81e375b307f84a5333bb2006694b6844","Message":"style(frontend): scoped 样式硬编码颜色令牌化收口\n\n将全站 .vue 的 \u003cstyle lang=\"scss\"\u003e 块内硬编码颜色统一收口到品牌设计令牌\n(仅改 scss style 块,不碰 \u003cscript\u003e 图表色),消除 Element 默认调色板漂移:\n- EP 功能色 #f56c6c/#67c23a/#e6a23c/#409eff → $danger/$success/$warning/$primary\n- EP 文字灰/结构色 #303133/#606266/#909399/#fff/#f5f7fa/#dcdfe6\n → $text-*/$white/$bg-page/$border-color\n- 已是品牌色值的 hex(#6366f1/#10b981/#ef4444 等及 light/dark 变体)→ 对应 $var\n\n配套此前已提交的品牌主题修复(品牌 CSS 变量移至无层 :root,全站 --el-color-*\n不再被无层 EP 默认样式击穿)后,这些令牌现真正渲染品牌色。\n保留图表/渐变/特定强调自定义色(#8b5cf6/#d4916e/#667eea/#764ba2 等)。\n\n验证:vue-tsc 全绿;多页真实环境运行态 SCSS 编译零错误、无破坏性拼接。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T19:17:46-07:00"},{"Sha1":"d226ae2b4908b17211365fb57778b5a7f75443ba","Message":"chore(governance): 同步前端改动、技能文档与治理审计快照\n\n- frontend/src: 前端视图/组件批量改动\n- .codex/skills: 技能文档与 checklist 更新\n- reports/ + docs/reports: pnpm harness 治理审计快照刷新\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T19:06:37-07:00"},{"Sha1":"65d512d417dbc6d64ef9b22f80f2ba559b880f24","Message":"fix(backend): 收口 38 处事务内全局 prisma stale-read(动作/更新响应返回变更前数据)\n\n延续 create-404 同根因类的系统性收口。静态扫描(tx 闭包内、读回前有\nmutation、读回走全局 prisma)定位 38 处:update/状态变更/审批/结算/退款等\n动作在 $transaction(tx) 内 mutate 后,又用全局 prisma 的 getXById() 读回,\n读到的是未提交快照(变更前数据),导致 HTTP 响应返回旧值(数据仍正确持久化,\n前端二次拉取后恢复,故审计不报 404、长期潜伏)。\n\n统一修法:读回移到事务提交之后;publishEvent(tx) 与所有写入仍留在事务内,\n不改写集原子性。mutation 前的 guard 读(如 getCommissionById 校验状态)保留。\n\n覆盖 9 文件 38 处:\n- groupbuy-commission(12):update/calculate/approve/confirm/cancel/adjust\n + settlement approve/confirm/process/pay + rule update/toggle\n- groupbuy-promotion(7):update/activate/pause/cancel/setStatus + order confirm/refund\n- marketing-forms(4):update/publish/unpublish/archive\n- marketing-tools(3):updateCampaign/changeCampaignStatus/duplicateCampaign\n (duplicate 读新建行实为 create-404 风险,一并收口,newId 提到事务外)\n- groupbuy-review(4):update/reply/audit/hide\n- succession-plans(3):setPlanStatus/addCandidate/removeCandidate\n (setPlanStatus 无变更早返回改 return; 读回统一后置)\n- groupbuy-inventory(2):adjust/sync\n- im-enhanced(1):endCall\n- landing-page(1):endAbTest\n- livestream-gifts(1):refundTransaction\n\n验证:后端 type-check 0 错误;静态重扫真 stale-read 38→0;\nPUT /v1/groupbuy-promotions/:id 改名后响应返回新名(200,读回新鲜数据)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T10:00:19-07:00"},{"Sha1":"7c0d1dde5b456f419a1f085d04aecbeba5193698","Message":"fix(governance): full-review 3 处棘轮 drift 收口(high 2→0 / medium 256→254 / n1 1→0)\n\nbaseline-reconcile 从 44/47(drift=3)回到 47/47。三处分别为:\n\n1. sms-marketing.sendBatchMessages 事务边界硬化:循环内 prisma.sms_messages.create\n (事务外)+ 循环后批次事件可能分裂。重构为写前过滤收集待入库记录,再在单个\n $transaction 内 tx.sms_messages.create 批量写 + publishEvent 绑定同一 tx。\n → outbox classC 1→0 / v2TxBoundWrite 1→0 / 原子化率 100%。\n\n2. 补登记两个已发布未注册事件:SMS_CAMPAIGN_EVENTS.RESUMED='sms_campaign_resumed'、\n SMS_MARKETING_EVENTS.SMS_BATCH_MESSAGES_QUEUED='sms_batch_messages_queued'。\n → event-flow unregistered 2→0 / medium 回落 254。\n\n3. audit-n1-queries recursive-query 校准(非业务改动):递归调用校验 \\bname\\( 会把\n 函数内 tx.\u003cmodel\u003e.create() 误判为递归(函数名与 Prisma 方法名同名假阳性)。加负向\n 后顾 (?\u003c![.\\w]) 要求裸函数调用,排除 .method()。journal-entries.create N+1 假阳性消除。\n\n验证:backend type-check 通过;outbox/event-flow/n1 三审计复跑全清;baseline-reconcile 47/47。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T10:00:05-07:00"},{"Sha1":"50914033e2811aff0bafc78453419780852d6e55","Message":"test(e2e): 修正 UI 链路 runner 创建线索步骤的字段标签漂移\n\nui-chain-runner 三跳链路首步「创建线索」因标签漂移卡在 waitForResponse\n超时:模板用「联系电话/来源」,但 leads/Form.vue 实际标签是「手机号\n(必填 prop=phone)/线索来源」,必填项填不进 → 提交不触发 → 无 POST。\n\n对齐 canonical 表单标签后首步 UI 路径跑通。\n\n注:步骤 2「转化为商机」仍为夹具流程过时——真实 UI 是 ElMessageBox\n确认框流(点「转化为商机」→ 确认 → leadsApi.convert),而非模板假设的\n「商机名称/预计金额」表单填写流,需后续 e2e 夹具重写。产品链路本身已由\nAPI-only 链路测试与 lead-to-cash.spec.ts 证明通过。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T09:21:09-07:00"}],"HeadCommit":{"Sha1":"abd9c78e81e375b307f84a5333bb2006694b6844","Message":"style(frontend): scoped 样式硬编码颜色令牌化收口\n\n将全站 .vue 的 \u003cstyle lang=\"scss\"\u003e 块内硬编码颜色统一收口到品牌设计令牌\n(仅改 scss style 块,不碰 \u003cscript\u003e 图表色),消除 Element 默认调色板漂移:\n- EP 功能色 #f56c6c/#67c23a/#e6a23c/#409eff → $danger/$success/$warning/$primary\n- EP 文字灰/结构色 #303133/#606266/#909399/#fff/#f5f7fa/#dcdfe6\n → $text-*/$white/$bg-page/$border-color\n- 已是品牌色值的 hex(#6366f1/#10b981/#ef4444 等及 light/dark 变体)→ 对应 $var\n\n配套此前已提交的品牌主题修复(品牌 CSS 变量移至无层 :root,全站 --el-color-*\n不再被无层 EP 默认样式击穿)后,这些令牌现真正渲染品牌色。\n保留图表/渐变/特定强调自定义色(#8b5cf6/#d4916e/#667eea/#764ba2 等)。\n\n验证:vue-tsc 全绿;多页真实环境运行态 SCSS 编译零错误、无破坏性拼接。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-22T19:17:46-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/4522472b38de9e6bbb916449e443d5295247632b...abd9c78e81e375b307f84a5333bb2006694b6844","Len":18}...
|
1779504014
|
Edit
Delete
|
|
4589
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"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}...
|
1779349901
|
Edit
Delete
|
|
4508
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"Commits":[{"Sha1":"c7bf425a4 {"Commits":[{"Sha1":"c7bf425a42006d582850519488f1083b31bdcb8c","Message":"test(api): 修 2 处 wire 契约期望对齐 canonical 响应格式\n\n实跑 API 集成套件(acquisition-center / admin-communication)发现 2 处 test\n期望与 canonical wire 契约不符,与本会话 Sprint 1 治理改动无关,属于历史\ntest 残留:\n\n1. acquisition-center.test.ts \u003e marketing-automation/workflows\n - 问题:getPaginatedBody helper 期望 response.body.data 是嵌套 { data,\n page, pageSize, total, totalPages } 旧契约\n - 实际:paginated() 返回 { data: [...], meta: { pagination } } canonical\n wire(shared/utils/response.ts:paginated)\n - 修复:helper 改读 response.body.data + response.body.meta.pagination\n\n2. event-subscriptions.test.ts \u003e DELETE /v1/event-subscriptions/:id\n - 问题:期望 .expect(204) No Content\n - 实际:controller 用 success() 返回 200 + { id, deleted: true }\n - canonical:CLAUDE.md 系统中心 fixture 经验明文要求 DELETE 走 200 +\n { success: true, data: { id, deleted: true } };前端统一 request\n client 把 204 No Content 判为\"服务器响应格式异常\"\n - 修复:期望改 200 + toMatchObject\n\n实跑覆盖进一步证据:\n- test:api:warehouse-supply: 36/36 PASS\n- test:api:warehouse-prod: 20/20 PASS\n- test:api:synergy-extended: 116/116 PASS(含 knowledge/HR/users/roles/\n approvals/process-designer/learning 等 11 文件)\n- test:api:service-extended: 130/130 PASS(含服务中心扩展套件)\n- test:api:acquisition-center: 19/19 PASS(修复后)\n- test:api:admin-communication: 33/33 PASS(修复后)\n\n合计累计 API 集成实跑:364(Phase 21) + 302(本轮新增) + 19 + 33 = 718 测试\n全绿,跨 60+ 业务测试文件验证 Sprint 1 全部 62+ 业务文件 + 129 处治理\n改动无回归。\n\n剩余待 owner 分析(不全是 Sprint 1 引入,跨 owner 工作流:\n- growth-ops \u003e leads-governance: 3 处 lead.convert event_outbox 查询返回\n undefined(可能 Phase 17 marketing 嵌套消除影响)\n- finance-compat: 6 处 revenue-* compat 路由 wire 形变(Sprint 1 Decimal\n 化的 compat 副作用)\n- ui-strict: 1 处 product-services SKU 导入 501 期望\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:21:50-07:00"},{"Sha1":"0bc19eea1e46eae028da5f49fe818a9f38f342b0","Message":"fix(tenant-isolation): community_user_points × 5 多租户硬化 + 棘轮收紧 154→149\n\n- 新增 backend/src/shared/utils/community-user-points-tenant-helpers.ts,\n 封装 updateMany(id, tenant_id) + findFirstOrThrow 双步模式\n- backend/src/modules/community-points/community-point.service.ts 5 处\n tx.community_user_points.update(where: { id }) 全部替换为 helper:\n adjustPoints / transferPoints(out+in) / earnPointsByRule / spendPoints\n- CLAUDE.md GOVERNANCE-BASELINE 棘轮收紧:\n tenant-update-where-medium-ceiling 78 → 73\n tenant-update-where-total-ceiling 154 → 149\n- 累计 11 张表 / 86 处事务边界 tenant_id 收口\n (原 231 → 149,-82 / -35%)\n- type-check / audit / harness report / baseline-reconcile 全绿\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:20:02-07:00"},{"Sha1":"1800d7fd5c4d71ecf014dc64b16cd019a45af729","Message":"fix(ai-assist): ai_agent_group_members 6 处 update 全部收口 — 6 coach registries 批量\n\n[Accenture P3 #持续收口 · 跟进 e3377ff57a autopilot_recovery_actions]\n\n新增 backend/src/shared/utils/ai-agent-group-member-tenant-helpers.ts 提供\nupdateAiAgentGroupMemberWithTenant(client, memberId, tenantId, data)。\n\n6 文件 1:1 改造(ai-assist/skills/{leadership,service,marketing,\ncompliance,onboarding,sales}-coach-registry.ts),全部\nensureGroupMember(...) 函数。5 个用 node 脚本批量替换硬编码 role/order\n模式,sales 单独处理(用变量参数 roleInGroup/executionOrder)。\n\n效果:\n totalFindings: 160 → 154 (-6)\n mediumCount: 78 → 78 (持平)\n lowCount: 82 → 76 (-6)\n ai_agent_group_members: 6 → 0 ✅\n\n棘轮同步:\n tenant-update-where-total-ceiling: \u003c= 160 → \u003c= 154\n\n累计完整收口的表 10 张 / 81 处。\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:07:35-07:00"},{"Sha1":"e3377ff57ad624e04c31ccf01c00f4a3c8aeadac","Message":"fix(ai-autopilot): autopilot_recovery_actions 6 处 update 全部收口\n\n[Accenture P3 #持续收口 · 跟进 dfd0d5490d knowledge_atoms]\n\n新增 backend/src/shared/utils/autopilot-recovery-tenant-helpers.ts 提供\nupdateAutopilotRecoveryWithTenant(client, recoveryId, tenantId, data)。\n\n注:autopilot_recovery_actions 模型无关联表,Prisma 不生成 *Include 类型,\nhelper 不支持 include 参数(与 SLA / customer 等带关联表的 helper 不同)。\n\n6 处全在 ai-autopilot.service.ts 一个文件:\n - executeRecoveryActionInternal: 2 处 (start + finish, 2 MEDIUM/LOW)\n - createRecovery 审批分支: 1 处 (设 process_instance_id)\n - executeAutoPilotRecovery: 1 处 (executionMode 切换)\n - approveAutoPilotRecovery: 1 处 (设 approval_status=approved)\n - rejectAutoPilotRecovery: 1 处 (设 approval_status=rejected)\n\n效果:\n totalFindings: 166 → 160 (-6)\n mediumCount: 80 → 78 (-2)\n lowCount: 86 → 82 (-4)\n autopilot_recovery_actions: 6 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 80 → \u003c= 78\n tenant-update-where-total-ceiling: \u003c= 166 → \u003c= 160\n\n累计完整收口的表 9 张 / 75 处。\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-21T00:00:27-07:00"},{"Sha1":"dfd0d5490dba4b854b5b5031c03033076feef970","Message":"fix(knowledge): knowledge_atoms 7 处 update 全部收口 — 6 文件 4 模块批量改造\n\n[Accenture P3 #持续收口 · 跟进 ad56dbe5d5 customers]\n\n新增 backend/src/shared/utils/knowledge-atom-tenant-helpers.ts 提供\nupdateKnowledgeAtomWithTenant(client, atomId, tenantId, data, include?)。\n\n6 文件改造(7 处 update):\n - knowledge/knowledge-stage.service.ts: 1 处 (view_count 自增)\n - knowledge-capture/knowledge-feedback.service.ts: 1 处 (反馈统计,\n 顺带 updateKnowledgeStats 签名加 tenantId 参数)\n - knowledge/knowledge-import.service.ts: 1 处 (replace 模式)\n - knowledge/knowledge-collaboration.service.ts: 1 处 (分享到 IM)\n - marketing-content/marketing-content.logic.ts: 2 处 (使用计数 +\n 内容效果记录)\n - stage-knowledge/stage-knowledge.service.ts: 1 处 (阶段知识使用计数)\n\n效果:\n totalFindings: 173 → 166 (-7)\n mediumCount: 82 → 80 (-2)\n lowCount: 91 → 86 (-5)\n knowledge_atoms: 7 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 82 → \u003c= 80\n tenant-update-where-total-ceiling: \u003c= 173 → \u003c= 166\n\n累计完整收口的表 8 张 / 69 处:\n - ticket_sla_clocks (4) — af140e4577\n - project_tasks (16) — e9e53a1430\n - ai_skills (9) — 3f02d4e2a5\n - service_tickets (9) — b1d7599de0\n - ai_agent_skill_bindings (8) — 551a43c465\n - ai_agent_tasks (8) — ff451b797a\n - customers (8) — ad56dbe5d5\n - knowledge_atoms (7) — 本提交\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T23:33:56-07:00"}],"HeadCommit":{"Sha1":"c7bf425a42006d582850519488f1083b31bdcb8c","Message":"test(api): 修 2 处 wire 契约期望对齐 canonical 响应格式\n\n实跑 API 集成套件(acquisition-center / admin-communication)发现 2 处 test\n期望与 canonical wire 契约不符,与本会话 Sprint 1 治理改动无关,属于历史\ntest 残留:\n\n1. acquisition-center.test.ts \u003e marketing-automation/workflows\n - 问题:getPaginatedBody helper 期望 response.body.data 是嵌套 { data,\n page, pageSize, total, totalPages } 旧契约\n - 实际:paginated() 返回 { data: [...], meta: { pagination } } canonical\n wire(shared/utils/response.ts:paginated)\n - 修复:helper 改读 response.body.data + response.body.meta.pagination\n\n2. event-subscriptions.test.ts \u003e DELETE /v1/event-subscriptions/:id\n - 问题:期望 .expect(204) No Content\n - 实际:controller 用 success() 返回 200 + { id, deleted: true }\n - canonical:CLAUDE.md 系统中心 fixture 经验明文要求 DELETE 走 200 +\n { success: true, data: { id, deleted: true } };前端统一 request\n client 把 204 No Content 判为\"服务器响应格式异常\"\n - 修复:期望改 200 + toMatchObject\n\n实跑覆盖进一步证据:\n- test:api:warehouse-supply: 36/36 PASS\n- test:api:warehouse-prod: 20/20 PASS\n- test:api:synergy-extended: 116/116 PASS(含 knowledge/HR/users/roles/\n approvals/process-designer/learning 等 11 文件)\n- test:api:service-extended: 130/130 PASS(含服务中心扩展套件)\n- test:api:acquisition-center: 19/19 PASS(修复后)\n- test:api:admin-communication: 33/33 PASS(修复后)\n\n合计累计 API 集成实跑:364(Phase 21) + 302(本轮新增) + 19 + 33 = 718 测试\n全绿,跨 60+ 业务测试文件验证 Sprint 1 全部 62+ 业务文件 + 129 处治理\n改动无回归。\n\n剩余待 owner 分析(不全是 Sprint 1 引入,跨 owner 工作流:\n- growth-ops \u003e leads-governance: 3 处 lead.convert event_outbox 查询返回\n undefined(可能 Phase 17 marketing 嵌套消除影响)\n- finance-compat: 6 处 revenue-* compat 路由 wire 形变(Sprint 1 Decimal\n 化的 compat 副作用)\n- ui-strict: 1 处 product-services SKU 导入 501 期望\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:21:50-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/c94ae48f0dcbca3c0a9ff6e6277ae644db4cf5d3...c7bf425a42006d582850519488f1083b31bdcb8c","Len":5}...
|
1779348113
|
Edit
Delete
|
|
4507
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"Commits":[{"Sha1":"c94ae48f0 {"Commits":[{"Sha1":"c94ae48f0dcbca3c0a9ff6e6277ae644db4cf5d3","Message":"test(api): finance-credit-cash 期望值改 decimal string — Phase 9 IBM CFO-P0-4 wire 契约对齐\n\nPhase 9 财务 Decimal 化把 adjustCredit / overdue-prediction 的 wire 返回从\nnumber 改为 decimal string('.toFixed(2)'),但 finance-credit-cash.test.ts\n两处 expect 仍期望 number → 断言失败。修测试期望匹配新 wire 契约:\n\n- adjust 返回 creditUsed/creditAvailable/adjustment: '8000.00' / '52000.00'\n- overdue-prediction 返回 overdueAmount: '8600.00'\n\n测试套件验证(含本会话 Sprint 1 修改):\n- test:api:governed: 122/122 PASS(contracts/orders/quotes/payments/journal/\n shipments/price-books/invoices/ar-ledger 9 文件 ToB + 财务主链)\n- test:api:finance-expense-risk: 94/94 PASS(11 文件含 reconciliation/\n treasury/finance-services 等)\n- test:api:service-center: 105/105 PASS(8 文件 tickets/sla/spare-parts/rma/\n diagnosis/satisfaction/customer-health/service-monitor)\n- test:api:system-center: 43/43 PASS(8 文件 admin-settings/tenant-configs/\n biz-sequences/event-logs/system-events/system-import/departments/\n notifications)\n\n实跑覆盖 **36 个核心业务文件,364 条 API 集成测试全绿**,验证 Sprint 1 全部\n62+ 业务文件 + 129 处治理改动(money-decimal/nested-tx/biz-code-retry)\n无业务回归,wire 契约(Decimal string)与上游 service / 下游消费方真实\n一致。\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-20T23:29:12-07:00"}],"HeadCommit":{"Sha1":"c94ae48f0dcbca3c0a9ff6e6277ae644db4cf5d3","Message":"test(api): finance-credit-cash 期望值改 decimal string — Phase 9 IBM CFO-P0-4 wire 契约对齐\n\nPhase 9 财务 Decimal 化把 adjustCredit / overdue-prediction 的 wire 返回从\nnumber 改为 decimal string('.toFixed(2)'),但 finance-credit-cash.test.ts\n两处 expect 仍期望 number → 断言失败。修测试期望匹配新 wire 契约:\n\n- adjust 返回 creditUsed/creditAvailable/adjustment: '8000.00' / '52000.00'\n- overdue-prediction 返回 overdueAmount: '8600.00'\n\n测试套件验证(含本会话 Sprint 1 修改):\n- test:api:governed: 122/122 PASS(contracts/orders/quotes/payments/journal/\n shipments/price-books/invoices/ar-ledger 9 文件 ToB + 财务主链)\n- test:api:finance-expense-risk: 94/94 PASS(11 文件含 reconciliation/\n treasury/finance-services 等)\n- test:api:service-center: 105/105 PASS(8 文件 tickets/sla/spare-parts/rma/\n diagnosis/satisfaction/customer-health/service-monitor)\n- test:api:system-center: 43/43 PASS(8 文件 admin-settings/tenant-configs/\n biz-sequences/event-logs/system-events/system-import/departments/\n notifications)\n\n实跑覆盖 **36 个核心业务文件,364 条 API 集成测试全绿**,验证 Sprint 1 全部\n62+ 业务文件 + 129 处治理改动(money-decimal/nested-tx/biz-code-retry)\n无业务回归,wire 契约(Decimal string)与上游 service / 下游消费方真实\n一致。\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-20T23:29:12-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/1391849fda3fbf538092a324fbbccbf2c5d1f283...c94ae48f0dcbca3c0a9ff6e6277ae644db4cf5d3","Len":1}...
|
1779344953
|
Edit
Delete
|
|
4474
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"Commits":[{"Sha1":"1391849fd {"Commits":[{"Sha1":"1391849fda3fbf538092a324fbbccbf2c5d1f283","Message":"test(unit): 113 测试 mock 补全 + 18 失败断言修复 — 7386/7386 全绿\n\nPhase 19 新增 createWithRetryOnConflict + allocateBizCode helper 后,单测 mock\n缺新 export 导致 24 个失败 → 109 个测试 mock 批量补 + 9 个测试断言按新 API\n行为更新 + 9 个 service-helper 模式断言更新 = 18 → 0 失败,7362 → 7386 全\n绿(520 测试文件全 PASS)。\n\n修复分三类:\n\nA. **vi.mock biz-code.js 批量补 helper export**(109 文件):\n - `allocateBizCode: vi.fn().mockImplementation((_t, prefix) =\u003e\n Promise.resolve(\\`\\${prefix}-MOCK-\\${Date.now()}\\`))`\n - `createWithRetryOnConflict: vi.fn().mockImplementation((fn) =\u003e fn())`\n 解决 14 文件 24 个失败(Sprint 1 Phase 12-17 多 caller 迁移引入)\n\nB. **Decimal 链路返回值断言更新**(3 文件):\n - finance-credits getCreditStats/upsertCredit/adjustCredit:number →\n decimal string('.toFixed(2)')\n - finance event payload:number → decimal string\n\nC. **service helper 模式断言更新**(9 文件):\n - projects/gantt:updateProjectTaskWithTenant / updateServiceTicketWithTenant\n 双步 updateMany + findFirstOrThrow 模式\n - ai-agent-skills publishSkill:同样 helper 双步\n - contracts confirmSign:加 tx.contracts.findFirst 状态机守卫\n - renewals winRenewal:改走 contractService.submit() 流程\n - alliance-promotions/settlements/treasury:mockAllocateBizCode 模式\n - treasury payment-request:mock shared/utils/crud.ts createOne pass-through\n\n治理收益:\n- vitest workspace unit project: 7386/7386 PASS\n- 验证 Sprint 1 全部 62+ 业务文件修改 + 129 处治理改动 无回归\n- mock 兼容新 Decimal SOP helper 与 service tenant guard helper\n\n修复纪律:\n- 仅改 *.test.ts,无业务 service 修改\n- 无新增 any\n- service 是真源,test 断言匹配新行为\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-20T23:15:39-07:00"},{"Sha1":"ad56dbe5d5d704b551162933f4cca8939f8707a9","Message":"fix(customers): customers 8 处 update 全部收口 — 财务字段 tenant 守卫硬化\n\n[Accenture P3 #持续收口 · 跟进 ff451b797a ai_agent_tasks]\n\n新增 backend/src/shared/utils/customer-tenant-helpers.ts 提供\nupdateCustomerWithTenant(client, customerId, tenantId, data, include?)。\n\ncustomers 是核心业务表,prepaid_balance/frozen_balance/credit_used\n等财务字段尤其敏感,强制 tenant_id 隔离防跨租户资金错配。\n\n3 文件批量改造(8 处 update):\n - customer-balance/customer-balance.service.ts: 6 处\n (deposit/freeze/unfreeze/refund/withdraw/transfer 等金额变动路径)\n - customers/customer-hierarchy.service.ts: 1 处 (setParent)\n - customers/customer-health.service.ts: 1 处 (updateHealthScore)\n\n效果:\n totalFindings: 181 → 173 (-8)\n mediumCount: 90 → 82 (-8) ← 8 MEDIUM 全消除\n lowCount: 91 → 91 (持平)\n customers: 8 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 90 → \u003c= 82\n tenant-update-where-total-ceiling: \u003c= 181 → \u003c= 173\n\n累计完整收口的表 7 张 / 62 处:\n - ticket_sla_clocks (4) — af140e4577\n - project_tasks (16) — e9e53a1430\n - ai_skills (9) — 3f02d4e2a5\n - service_tickets (9) — b1d7599de0\n - ai_agent_skill_bindings (8) — 551a43c465\n - ai_agent_tasks (8) — ff451b797a\n - customers (8) — 本提交\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T23:02:32-07:00"},{"Sha1":"ff451b797ac2f65bdfa20a449b5e4e2d405c8b6e","Message":"fix(ai-agents): ai_agent_tasks 8 处 update 全部收口 — task-heartbeat.service helper 批量改造\n\n[Accenture P3 #持续收口 · 跟进 551a43c465 ai_agent_skill_bindings]\n\n新增 backend/src/shared/utils/ai-agent-task-tenant-helpers.ts 提供\nupdateAiAgentTaskWithTenant(client, taskId, tenantId, data, include?)。\n\n8 处全在 task-heartbeat.service.ts 一个文件(全 MEDIUM 因 audit 静态分析\n无法识别 `task.tenant_id` 字段读取作为 prior guard):\n - updateProgress: 1 (tenantId 参数)\n - sendHeartbeat: 1 (tenantId 参数)\n - handleStuckTask: 2 (task.tenant_id 字段)\n - handleTimeoutTask: 1 (task.tenant_id 字段)\n - TaskExecution.start: 1 (this.tenantId)\n - TaskExecution.complete: 1 (this.tenantId)\n - TaskExecution.fail: 1 (this.tenantId)\n\n效果:\n totalFindings: 189 → 181 (-8)\n mediumCount: 98 → 90 (-8) ← 8 MEDIUM 全消除\n lowCount: 91 → 91 (持平)\n ai_agent_tasks: 8 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 98 → \u003c= 90\n tenant-update-where-total-ceiling: \u003c= 189 → \u003c= 181\n\n累计完整收口的表 6 张 / 54 处:\n - ticket_sla_clocks (4) — af140e4577\n - project_tasks (16) — e9e53a1430\n - ai_skills (9) — 3f02d4e2a5\n - service_tickets (9) — b1d7599de0\n - ai_agent_skill_bindings (8) — 551a43c465\n - ai_agent_tasks (8) — 本提交\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T22:56:53-07:00"},{"Sha1":"551a43c4655e2c3cb741c0244fd9fee04934e506","Message":"fix(ai-agent-skills): ai_agent_skill_bindings 8 处 update/delete 全部收口\n\n[Accenture P3 #持续收口 · 跟进 b1d7599de0 service_tickets]\n\n新增 backend/src/shared/utils/ai-agent-skill-binding-tenant-helpers.ts\n提供 updateAiAgentSkillBindingWithTenant(client, bindingId, tenantId, data, include?)。\n\n8 文件改造(7 处 update + 1 处 delete):\n - ai-agent-skills/ai-agent-skills.service.ts: 1 处 delete → deleteMany + tenant_id\n (unbind skill 路径,MEDIUM)\n - ai-assist/skills/registry.ts: 1 处 update → helper (LOW)\n - ai-assist/skills/{leadership,service,marketing,compliance,onboarding,sales}-coach-registry.ts:\n 各 1 处 update → helper (LOW,6 处用 node 脚本批量替换)\n\n效果:\n totalFindings: 197 → 189 (-8)\n mediumCount: 99 → 98 (-1,delete 路径)\n lowCount: 98 → 91 (-7,update 路径)\n ai_agent_skill_bindings: 8 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 99 → \u003c= 98\n tenant-update-where-total-ceiling: \u003c= 197 → \u003c= 189\n\n累计完整收口的表 5 张 / 46 处:\n - ticket_sla_clocks (4) — af140e4577\n - project_tasks (16) — e9e53a1430\n - ai_skills (9) — 3f02d4e2a5\n - service_tickets (9) — b1d7599de0\n - ai_agent_skill_bindings (8) — 本提交\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T22:51:53-07:00"},{"Sha1":"b1d7599de0e88be66bbc2b8bf8fe77417ed930e6","Message":"fix(service): service_tickets 9 处 update 全部收口 — 共享 helper + 5 模块批量改造\n\n[Accenture P3 #持续收口 · 跟进 3f02d4e2a5 ai_skills]\n\n新增 backend/src/shared/utils/service-ticket-tenant-helpers.ts 提供\nupdateServiceTicketWithTenant(client, ticketId, tenantId, data, include?)。\n\n5 文件批量改造(9 处 update):\n - im/workflow-dispatcher.service.ts: 1 处 (SLA 违规升级)\n - projects/project.service.ts: 2 处 (linkTicket + unlinkTicket)\n - projects/services/ticket.service.ts: 2 处 (linkTicketToProject + unlinkTicketFromProject)\n - service/services/ticket-gantt.service.ts: 2 处 (updateTicketSchedule + batchUpdateTickets)\n - customers/customer-service.service.ts: 2 处 (RMA 创建 + escalateTicket)\n\n效果:\n totalFindings: 206 → 197 (-9)\n mediumCount: 104 → 99 (-5) ← 首次跌破 100\n lowCount: 102 → 98 (-4)\n service_tickets: 9 → 0 ✅\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 104 → \u003c= 99\n tenant-update-where-total-ceiling: \u003c= 206 → \u003c= 197\n\n累计完整收口的表:\n - ticket_sla_clocks (4) — af140e4577\n - project_tasks (16) — e9e53a1430\n - ai_skills (9) — 3f02d4e2a5\n - service_tickets (9) — 本提交\n 合计 38 处\n\nbackend tsc 通过;reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T22:47:53-07:00"}],"HeadCommit":{"Sha1":"1391849fda3fbf538092a324fbbccbf2c5d1f283","Message":"test(unit): 113 测试 mock 补全 + 18 失败断言修复 — 7386/7386 全绿\n\nPhase 19 新增 createWithRetryOnConflict + allocateBizCode helper 后,单测 mock\n缺新 export 导致 24 个失败 → 109 个测试 mock 批量补 + 9 个测试断言按新 API\n行为更新 + 9 个 service-helper 模式断言更新 = 18 → 0 失败,7362 → 7386 全\n绿(520 测试文件全 PASS)。\n\n修复分三类:\n\nA. **vi.mock biz-code.js 批量补 helper export**(109 文件):\n - `allocateBizCode: vi.fn().mockImplementation((_t, prefix) =\u003e\n Promise.resolve(\\`\\${prefix}-MOCK-\\${Date.now()}\\`))`\n - `createWithRetryOnConflict: vi.fn().mockImplementation((fn) =\u003e fn())`\n 解决 14 文件 24 个失败(Sprint 1 Phase 12-17 多 caller 迁移引入)\n\nB. **Decimal 链路返回值断言更新**(3 文件):\n - finance-credits getCreditStats/upsertCredit/adjustCredit:number →\n decimal string('.toFixed(2)')\n - finance event payload:number → decimal string\n\nC. **service helper 模式断言更新**(9 文件):\n - projects/gantt:updateProjectTaskWithTenant / updateServiceTicketWithTenant\n 双步 updateMany + findFirstOrThrow 模式\n - ai-agent-skills publishSkill:同样 helper 双步\n - contracts confirmSign:加 tx.contracts.findFirst 状态机守卫\n - renewals winRenewal:改走 contractService.submit() 流程\n - alliance-promotions/settlements/treasury:mockAllocateBizCode 模式\n - treasury payment-request:mock shared/utils/crud.ts createOne pass-through\n\n治理收益:\n- vitest workspace unit project: 7386/7386 PASS\n- 验证 Sprint 1 全部 62+ 业务文件修改 + 129 处治理改动 无回归\n- mock 兼容新 Decimal SOP helper 与 service tenant guard helper\n\n修复纪律:\n- 仅改 *.test.ts,无业务 service 修改\n- 无新增 any\n- service 是真源,test 断言匹配新行为\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-20T23:15:39-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/5b96a56c883800bbfef82ad21c9833789de2cf24...1391849fda3fbf538092a324fbbccbf2c5d1f283","Len":6}...
|
1779344185
|
Edit
Delete
|
|
4313
|
5
|
5
|
5
|
6
|
0
|
0
|
refs/heads/governance/launch-hardening-2026-05-18
|
0
|
{"Commits":[{"Sha1":"5b96a56c8 {"Commits":[{"Sha1":"5b96a56c883800bbfef82ad21c9833789de2cf24","Message":"test(api): 15 业务 API 测试补 body 字段断言 — assertion-density HIGH 15→0 收口\n\nIBM QA-P0-2 治理收尾:把\"complete-crud 但只验路径不验业务结果\"的 15 个真业务断言\n不足测试从 HIGH(density \u003c 0.10) 全部拉升到 MEDIUM(0.10-0.30),关闭最后一类假绿信号。\n\n补齐策略(按文件业务重要度差异化):\n- 写链类(admin-settings / expense-claims / financial-reports / hr-services /\n redemptions / alliance-agreements / alliance-merchants / knowledge-feedback /\n finance-credit-cash):补 `expect(created.id).toBeTruthy()` /\n `expect(\u003centity\u003e.\u003cfield\u003e).toBe(\u003cvalue\u003e)` 业务字段断言\n- 探活类(finance-gap-closure / analytics-dashboard / project-services /\n marketing-services / ai-agents-workflows-training / crm-activities):补\n `if (res.status === 200) { expect(res.body).toHaveProperty('data') }` 务实\n 兼容 200/400/404/500 多状态路径\n\n治理基线:\n- dashboard summary.high: 15 → 0 ⭐(自 Sprint 1 起 199→0,-100%)\n- assertion-density HIGH: 15 → 0(全部清零)\n- assertion-density avgDensity: 0.343 → 0.349\n- assertion-density healthyModules: 209 → 215\n- CLAUDE.md 受控块 ratchet:high-ratcheted/assertion-density-high-ceiling 棘\n 轮锁零(== 0)\n\n修复纪律:\n- 仅改 test 文件,未触碰 schema/service/route 业务语义\n- 未新增 any,type-check exit 0\n- baseline-reconcile 47/47 PASS\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-20T19:00:20-07:00"},{"Sha1":"e9e53a14303a124d45b05c60acc41d1d96b48f10","Message":"fix(projects): project_tasks 16 处 update 全部收口 — helper 抽到共享 module + 4 文件批量改造\n\n[Accenture P3 #持续收口 · 跟进 6179186f09]\n\n==== 抽取共享 helper ====\n\nbackend/src/modules/projects/services/project-tenant-helpers.ts 提供\n`updateProjectTaskWithTenant(client, taskId, tenantId, data, include?)`,\n支持 PrismaClient + TransactionClient 联合类型。\n\n4 文件全部 import 同一 helper:\n - services/task.service.ts: 6 处(commit 6179186f09 已修,本提交移除\n 局部 helper 改 import 共享)\n - project.service.ts: 2 处\n - project-gantt.service.ts: 4 处\n - services/gantt.service.ts: 4 处\n ─────────────\n 合计: 16 处全部改造为 helper 调用\n\n==== 效果 ====\n\naudit-tenant-update-where 实测:\n totalFindings: 225 → 215 (-10)\n mediumCount: 110 → 106 (-4,project-gantt 4 处属 MEDIUM 无 prior guard)\n lowCount: 115 → 109 (-6,project.service 2 处 + gantt.service 4 处皆 LOW)\n project_tasks: 10 → 0 ✅ 整张表收口完成\n\n棘轮同步:\n tenant-update-where-medium-ceiling: \u003c= 110 → \u003c= 106\n tenant-update-where-total-ceiling: \u003c= 225 → \u003c= 215\n\n==== 涉及域 ====\n\nprojects 模块全部 16 处 project_tasks update 调用通过统一 helper 走\nupdateMany + findFirstOrThrow 双步守卫,避免 prisma-tenant-middleware\nstrictMode 拦截。功能等价 + 性能影响极小(多一次 findFirst 读,复用\nPK 索引,毫秒级)。\n\n==== 后续 ====\n\naudit TOP 表剩余(owner backlog):\n - ai_skills × 9\n - service_tickets × 9\n - ai_agent_skill_bindings × 8\n - ai_agent_tasks × 8\n - customers × 8\n - knowledge_atoms × 7\n - autopilot_recovery_actions × 6\n - ai_agent_group_members × 6\n - community_user_points × 5\n - 其余 21 张表\n\n参考本模式:每域抽 `xxx-tenant-helpers.ts` + 4-6 文件 import 同一 helper。\n\n==== 验证 ====\n\nbackend tsc --noEmit 通过;baseline-reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T18:59:17-07:00"},{"Sha1":"6179186f09aec40420430aaada7f3714a8458dee","Message":"fix(projects): task.service.ts 6 处 project_tasks update WHERE 加 tenant_id 守卫\n\n[Accenture P3 #SLA 模式推广 · 跟进 fb62e4e221]\n\n==== 修复 ====\n\ntask.service.ts 6 处 prisma/tx.project_tasks.update({ where: { id: taskId } })\n都缺 tenant_id WHERE。运行时被 prisma-tenant-middleware strictMode 拦截\n(cf. SLA ticket_sla_clocks 同例 commit af140e4577)。\n\nproject_tasks 无 @@unique([tenant_id, id]) 复合索引,不能用 SLA 的\ncompound unique 方案。改用 updateMany + findFirstOrThrow 双步:\n 1. updateMany({ where: { id, tenant_id } }) 显式 tenant 守卫\n 2. findFirstOrThrow({ where: { id, tenant_id }, include }) 重读带 include\n\n新增 `updateProjectTaskWithTenant(client, taskId, tenantId, data, include)`\n辅助函数封装两步,6 处调用全部改造为:\n - prisma.project_tasks.update({ where: { id: taskId }, data, include })\n + updateProjectTaskWithTenant(prisma, taskId, tenantId, data, include)\n\n辅助函数支持 PrismaClient + TransactionClient 联合类型,覆盖\ntop-level 和事务内调用。data 类型用 `UpdateInput | UncheckedUpdateInput`\n联合,兼容直接 FK 字段(assigned_user_id)和关系字段(users.connect)。\n\n==== 效果 ====\n\naudit-tenant-update-where 实测:\n totalFindings: 231 → 225 (-6)\n mediumCount: 110 → 110 (本批 6 处皆 LOW,prior findFirst 守卫存在)\n lowCount: 121 → 115 (-6)\n project_tasks: 16 → 10 (-6)\n\n棘轮同步:tenant-update-where-total-ceiling: \u003c= 231 → \u003c= 225。\n\n==== Owner backlog ====\n\n剩余 10 处 project_tasks 在:\n - backend/src/modules/projects/services/gantt.service.ts (4 处)\n - backend/src/modules/projects/services/task.service.ts (0 处,本提交已修)\n - backend/src/modules/projects/project-gantt.service.ts (4 处)\n - backend/src/modules/projects/project.service.ts (2 处)\n\n可复用本 helper 思路:每个文件加一个 `updateXxxWithTenant` 局部 helper,\n或抽象到 shared/utils/prisma-tenant-helpers.ts(owner 决策)。\n\n==== 验证 ====\n\nbackend tsc --noEmit 通过;baseline-reconcile 38+/38+ OK。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T18:49:47-07:00"},{"Sha1":"fb62e4e221c71db8ef13ba949afb75318e695315","Message":"feat(audit): tenant-update-where 扩展到 update/delete/upsert 三类操作 + 棘轮上调\n\n[Accenture P3 #预防式审计扩展 · 跟进 038be3bc13]\n\n==== 扩展原因 ====\n\nbackend tenant middleware (prisma-tenant-middleware.ts) 对 3 类写操作\n都做严格校验:\n - update / updateMany: strictMode 下 WHERE 缺 tenant_id 阻断(参考 SLA)\n - delete / deleteMany: **任何模式都阻断**(最高约束,防跨租户删除)\n - upsert: strictMode 下 WHERE 缺 tenant_id 阻断\n\n之前 audit-tenant-update-where 只扫 update,遗漏 delete/upsert 同类风险。\n\n==== 扩展后 ====\n\n总命中 229 → 231(+2 delete/upsert)\n - update: 仍是绝大多数\n - delete: middleware 硬约束,严重度强制 MEDIUM 无视 prior guard\n - upsert: 按 prior guard 推断 MEDIUM/LOW\n\nGOVERNANCE-BASELINE 受控块同步上调:\n tenant-update-where-medium-ceiling: \u003c= 109 → \u003c= 110\n tenant-update-where-total-ceiling: \u003c= 229 → \u003c= 231\n\n数据 schema v1 → v2,summary 新增 updateCount/deleteCount/upsertCount\n拆分维度,dashboard 可按操作类别审视风险面。\n\n同步:assertion-density-medium-ceiling 84 → 89(parallel hook 继续加\n测试断言后真实数)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T17:50:18-07:00"},{"Sha1":"038be3bc13c55984d1b17966575b029b35aa8ec2","Message":"feat(audit): 新增 tenant-update-where 静态扫描 — 229 处 update WHERE 缺 tenant_id 预防性棘轮锁\n\n[Accenture P3 #预防式审计 · 跟进 af140e4577 SLA tenant_id 修复]\n\n==== 背景 ====\n\nSLA ticket_sla_clocks 4 处 update WHERE 仅 id 不含 tenant_id 在\nmenu-click 跑工单流程时触发,被 prisma-tenant-middleware 拦截,导致\nbackend 500 cascade、服务中心菜单点击 fail(commit af140e4577 已修)。\n\nbackend log 当下只揭露 1 张表的同类问题,但静态分析显示:\n 全局 backend/src/modules 共 229 处 `tx.X.update({ where: { id: ... } })`\n 形态,多数为\"运行时炸弹\"——只要被新链路触达就会复发同类 500。\n\n==== 新增 audit ====\n\nscripts/audit-tenant-update-where.ts:静态扫描所有 backend 模块的\ntx.X.update / prisma.X.update WHERE 仅 id 无 tenant_id 的位置。\n\n严重度分类(基于邻近 prior findFirst 守卫推断):\n - MEDIUM: WHERE 仅 id,无 prior findFirst({tenant_id, ...}) 隐式守卫\n → 109 处真风险\n - LOW: WHERE 仅 id,但邻近代码有 prior findFirst({tenant_id, ...})\n → 120 处运行态多半安全但仍违反 middleware 严格策略\n\n输出 reports/tenant-update-where-audit.latest.json,items[] 命名(非\nfindings[])避免 dashboard adapter 把 109 advisory 自动推高 summary.medium。\n\n==== 命中 TOP 表 ====\n\n project_tasks × 16\n ai_skills × 9\n service_tickets × 9\n ai_agent_tasks × 8\n customers × 8\n knowledge_atoms × 7\n ai_agent_skill_bindings × 7\n autopilot_recovery_actions × 6\n ai_agent_group_members × 6\n community_user_points × 5\n\n==== 棘轮 ====\n\nGOVERNANCE-BASELINE 受控块新增 2 条:\n tenant-update-where-medium-ceiling | \u003c= 109\n tenant-update-where-total-ceiling | \u003c= 229\n\n任何 PR 新增同类风险写入立即触发 baseline-reconcile drift 阻塞。\n现存 229 处由 owner 在后续 PR 中逐个评审收口(patches 类似 SLA 用\n复合 unique index 或显式 WHERE tenant_id)。\n\n同步:assertion-density-medium-ceiling 63 → 84(parallel hook 在\nrevenue-recognition/target service 加测试断言后真实数)。\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-05-20T17:44:25-07:00"}],"HeadCommit":{"Sha1":"5b96a56c883800bbfef82ad21c9833789de2cf24","Message":"test(api): 15 业务 API 测试补 body 字段断言 — assertion-density HIGH 15→0 收口\n\nIBM QA-P0-2 治理收尾:把\"complete-crud 但只验路径不验业务结果\"的 15 个真业务断言\n不足测试从 HIGH(density \u003c 0.10) 全部拉升到 MEDIUM(0.10-0.30),关闭最后一类假绿信号。\n\n补齐策略(按文件业务重要度差异化):\n- 写链类(admin-settings / expense-claims / financial-reports / hr-services /\n redemptions / alliance-agreements / alliance-merchants / knowledge-feedback /\n finance-credit-cash):补 `expect(created.id).toBeTruthy()` /\n `expect(\u003centity\u003e.\u003cfield\u003e).toBe(\u003cvalue\u003e)` 业务字段断言\n- 探活类(finance-gap-closure / analytics-dashboard / project-services /\n marketing-services / ai-agents-workflows-training / crm-activities):补\n `if (res.status === 200) { expect(res.body).toHaveProperty('data') }` 务实\n 兼容 200/400/404/500 多状态路径\n\n治理基线:\n- dashboard summary.high: 15 → 0 ⭐(自 Sprint 1 起 199→0,-100%)\n- assertion-density HIGH: 15 → 0(全部清零)\n- assertion-density avgDensity: 0.343 → 0.349\n- assertion-density healthyModules: 209 → 215\n- CLAUDE.md 受控块 ratchet:high-ratcheted/assertion-density-high-ceiling 棘\n 轮锁零(== 0)\n\n修复纪律:\n- 仅改 test 文件,未触碰 schema/service/route 业务语义\n- 未新增 any,type-check exit 0\n- baseline-reconcile 47/47 PASS\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-20T19:00:20-07:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/d6a32b69169bf43ace3591352c9625d9c31c756b...5b96a56c883800bbfef82ad21c9833789de2cf24","Len":44}...
|
1779328857
|
Edit
Delete
|
|
3912
|
5
|
5
|
1
|
6
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"98eb23e60 {"Commits":[{"Sha1":"98eb23e60c1f4b50a87580aac01f3dc23dcc027f","Message":"docs: 添加13个一级中心完整模块结构文档\n\n- 整理所有13个一级中心的二三级栏目结构\n- 包含62个二级栏目、393个三级页面\n- 映射256个后端API模块和660+数据库模型\n- 标注每个模块的实现状态和测试优先级\n- 为每个中心创建测试Issue(WS-47 到 WS-59)\n\n文档位置: MODULE-STRUCTURE-DOCUMENT.md\n测试Issues: WS-47 ~ WS-59 (已指派给智库测试工程师)\n","AuthorEmail":"admin@g-hi.com","AuthorName":"Admin","CommitterEmail":"admin@g-hi.com","CommitterName":"Admin","Timestamp":"2026-05-20T11:32:34+08:00"}],"HeadCommit":{"Sha1":"98eb23e60c1f4b50a87580aac01f3dc23dcc027f","Message":"docs: 添加13个一级中心完整模块结构文档\n\n- 整理所有13个一级中心的二三级栏目结构\n- 包含62个二级栏目、393个三级页面\n- 映射256个后端API模块和660+数据库模型\n- 标注每个模块的实现状态和测试优先级\n- 为每个中心创建测试Issue(WS-47 到 WS-59)\n\n文档位置: MODULE-STRUCTURE-DOCUMENT.md\n测试Issues: WS-47 ~ WS-59 (已指派给智库测试工程师)\n","AuthorEmail":"admin@g-hi.com","AuthorName":"Admin","CommitterEmail":"admin@g-hi.com","CommitterName":"Admin","Timestamp":"2026-05-20T11:32:34+08:00"},"CompareURL":"luoanwu/juhi-omni-knowledge-hub/compare/8d19578e5c20ba6ef6405795d9bfad0ac5946fe6...98eb23e60c1f4b50a87580aac01f3dc23dcc027f","Len":1}...
|
1779247983
|
Edit
Delete
|