zizi ca695362bd fix(trade): M4 支付 2 个 P0 资金安全 bug(对抗审计 Opus+Codex+主agent 三方确认,87单测漏掉)
- P0-1 money-loss:AccountServiceImpl settlePaid/refundFrozen 更新 0 行原只 log.error 不抛→改抛 TRADE_ACCOUNT_FROZEN_NOT_ENOUGH(错误码 1-106-001-002),让 handlePayoutNotify(@Transactional)的 status CAS 与账户动作一并回滚,杜绝"状态已置终态、资金没动"半态 commit 破 balance+frozen+total_withdraw=total_income 恒等式;对齐既有 freeze 0 行抛错范式
- P0-2 切渠道误驱动:PayoutClientFactory 加 byChannel(channel)(current() 委托之、fail-fast 收敛一处);compensateStuckPayouts 改用 byChannel(w.getChannel()) 按提现单记录渠道查终态,而非当前 Nacos 渠道——切渠道(mock→wxpay)不再用错渠道 client 误驱动 1→2/1→4
- 单测+5:0行抛错(settle/refund)/回滚透传(handlePayoutNotify)/byChannel(注册·未注册fail-fast)/compensate 渠道路由;mini trade-server 46 测全绿(41→46)零回归
- Codex 佐证:同 bizNo 并发/成功失败回调赛跑/审核驳回赛跑均被 uk_biz_no/status CAS 挡住(安全),无新增 P0
- 余 P1/P2(mock 渠道崩溃卡单兜底/ad 回调空 secret 铸币面/setSql 预防)待 Codex 完整报告后续修
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:55:47 +00:00

52 lines
2.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

node_modules/
.pnpm-store/
dist/
build/
coverage/
.next/
.turbo/
.vite/
.env
.env.*
!.env.example
.idea/
*.log
.DS_Store
.gstack/
# ── 例外 1源码树src/)下名为 build 的目录是合法源码,绝非构建产物 ──
# 第 5 行笼统的 build/(为构建产物设计)会误吞 Java/前端源码中名为 build 的包/目录,例如:
# 后端 com.wanxiang.huijing.game.module.runtime.{dal.dataobject,dal.mysql,service}.build编译任务域4 文件)、
# 前端 game-admin/src/views/infra/build。
# 构建产物绝不落在 src/ 下,故一律豁免 src/ 下的 build/,避免克隆/CI 缺源码而编译失败。
!**/src/**/build/
!**/src/**/build/**
# ── 例外 2game-adminhuijing 前端 fork模块根级例外 ──
# huijing 约定将「模块根」build/vite 插件配置源码,不在 src 下,故需单独豁免)与 .env*(前端构建配置,非密钥)纳入版本库。
!game-admin/build/
!game-admin/build/**
!game-admin/.env
!game-admin/.env.dev
!game-admin/.env.local
!game-admin/.env.prod
!game-admin/.env.stage
!game-admin/.env.test
# ── 例外 3game-studio 联调 envstaging 后端地址 + studio token非密钥须入库供 mini-desktop 克隆联调)──
# 同 gitignore-swallows-frontend-source 记忆:根 .env.* 笼统忽略会吞掉 game-studio/.env.staging
# 致 mini-desktop 匿名克隆后拿不到联调配置、vite --mode staging 起不来。故显式豁免。
!game-studio/.env.staging
# ── Python 字节码缓存QA 编排器/评估脚本运行即生成,纯缓存可重建;目录名固定,无误吞源码风险(不同于上面 build/ 的教训)──
__pycache__/
.pytest_cache/
# ── 存储分层 H32026-06-16 agent-specs 目录治理,配套 .agents/rules/engineering-conventions.md §10.3)──
# docs/agent-specs/ 只放文档(*.md)spike 代码/批跑证据(hash 目录/jsonl/截图)/模型原始输出等可重生成产物不入文档树。
# __pycache__/ 与 node_modules/ 已由上方全局规则拦截;新 spike 原始 json/png 默认 untracked、勿 git add 批量产物。
# 注意(遵 gitignore-swallows-frontend-source 教训):此处不设 *.json/*.png 笼统忽略,以免误吞 contracts/ 等业务目录下的合法同类文件——分层靠规范 + 收口第 8 步执行,不靠笼统 glob。