| content |
{"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}... |