lili
819522d752
fix(release): close dogfood security blockers
...
Make the dogfood security foundation self-contained, reject external runtime RPC writes, and bind publish state transitions with database concurrency controls.
2026-07-22 22:12:45 -07:00
lili
00ebeedc50
fix(ad): M4 回调验签 fail-closed 封铸币面 + M4广告SDK预接线设计回炉(R3 双评审 BLOCKER/MAJOR)
...
代码加固(仅 game-module-ad):
- AdProviderFactory 增 getStrict(未注册返 null、绝不降级 mock),回调路径改用之;get() 展示计费降级保持不变
- MockAdProvider 覆写 verifyRewardCallback 返 false(mock 不接联盟回调,纵深防御第一层)
- reportRewardCallback fail-closed:provider 未就绪抛 PROVIDER_NOT_READY(新增 1-111-002-005)
- ad.force-mock 熔断:只拒真实联盟位回调、不碰 calcRevenue、不影响 mock/callback 桩
- 回调铸币面全组合矩阵单测 8 格(provider×force-mock);ad 模块 33 单测全绿(Callback 7/AdSlot 6/AdRevenue 20)
设计档回炉(逐条吃双评审):
- B1 三层开关安全语义拆分(算钱降级宽松 vs 验签 fail-closed)+ runbook 切前 fail-closed 闸
- B2 冲正定死:不估算入账,以联盟 T+1 账单实际金额为唯一 trade 入账源(消除冲正,uk_source 幂等/账户恒等式成立)
- M1 热刷新 @RefreshScope 方案入档(本机验不了标 follow-up,runbook 滚动重启兜底 + 资损敞口)
- M2 契约断言改真话(callback 枚举 R4 bc0f486b 已补齐;AdSlotSaveReqVO 无 enum 强校验如实、R3 不补理由)
- 防重放窗口配置项预置(owner/默认300/上限900/timestamp fail-safe)+ ACK/来源IP进待核清单 + runbook 放量停止阈值
红线守住:不动 trade(冲正只设计)/不动 contracts(R4 已收口)/不写真实 provider 类。docs-gate 七检全绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:41:08 -07:00
lili
b31cc37a4f
chore(brand): 造梦AI→绘境AI 全活层品牌不变量收口(441 文件)
...
把活层退役旧品牌「造梦AI」统一改为现行「绘境AI」,brand-invariant 门红线归零。构成:
~412 Java @author 署名 + game-studio/index.html 浏览器标题 + game-runtime/package.json 描述
+ game-admin/.env VITE_APP_TITLE 运营后台标题 + contracts API title/@Schema 用户协议示例/events 描述
+ docs-design mockup 品牌位 + 各模块注释。全是注释/显示/元数据,零逻辑改动。
zaomeng 拼音持久化标识符按 2026-06-24 评审 GR-05 不动(347 处保留)。
白名单(docs/ip 法律备案 / _archive / 带日期留痕)与 AGENTS.md 门定义自身不动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 08:29:11 -07:00
lili
ff46b90ee7
fix(flyway): 删 5 个 module 迁移重复副本——消同版本重复致 dev/2.0.0 启动失败(P0 #3)
...
Flyway 在 classpath 撞同版本即拒启(Found more than one migration with version):V6/7/8/9/18 既在
huijing-server 聚合(V1-V25,已应用到 live = 单一事实源)又各在 module-server 重复(06-18 各 lane 加功能误放)。
删 module 副本、留 huijing-server 聚合:
- V6/V8/V9/V18 两边 md5 完全一致 = 纯去重
- V7(trade) 仅注释差异(列定义同;game_trade_grant 表在 V21 不在 V7)→ 留 huijing-server 已应用版
(改已应用迁移会 checksum 漂移;module 副本的注释改动弃)
全仓扫描:删后无重复版本、无 module-only 迁移(30=25 聚合+5 副本)。库停 V17 未污染。
注:依赖自身 db/migration 的 module 测试若存在需后续改 test-scoped schema(本修以解 boot 为先,redeploy -DskipTests 不受影响)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 05:55:09 -07:00
zizi
c42135bf6b
fix(trade,ad): M4 支付 P1/P2 加固(对抗审计 opus 一轮收尾)——mock 卡单兜底 + ad 回调铸币面
...
- P1-1 mock 崩溃卡单兜底:MockPayoutClient.queryTerminalStatus 由默认 UNKNOWN→返 SUCCESS(同步直通已发起即成功),让 compensateStuckPayouts 能恢复"initiatePayout 后回调前进程崩溃"致 status=1 卡死的提现单(frozen 不再永久锁死)
- P2-2 ad 回调空 secret 铸币面:CallbackAdProvider 空 sign-secret 由"直通 return true"改"默认拒绝 return false",新增 ad.callback.sandbox-passthrough 显式开关(仅开时空 secret 桩直通,生产严禁开+注释固化);堵死 @PermitAll 公网端点伪造回调铸广告收入入台账
- P1-2 setSql 拼接:AccountMapper 加注释固化"金额必须服务端校验过的 Long、严禁字符串透传"(预防性,不改逻辑)
- 单测:MockPayoutClientTest 新建 + CallbackAdProviderTest(空secret拒绝/passthrough放行)+ PayoutClientFactoryTest 断言更新;mini ad 40 测 + trade 73 测全绿(主 agent 自跑、逮修 opus 截断留下的 2 处旧断言)
2026-06-16 11:15:47 +00:00
zizi
e3be456d82
feat(trade,ad,community): M4 变现④可切真(goal G1)——打款异步/fail-fast/reward到账/广告回调
...
设计权威=docs/agent-specs/2026-06-16-M4变现真实化-review.md(主agent评审通过)。前提:ad/trade业务逻辑读码实证已真,本波=切真+补e2e门+衔接。
- 打款异步状态机(trade):审核 0→1 打款中(不置已打款,§2.3解耦)→事务外发起转账→回调驱动 1→2/1→4(CAS幂等防重复发钱);WithdrawPayoutCompensateJob 对账补偿扫卡单
- fail-fast(PayoutClientFactory):真实渠道缺实现抛 TRADE_PAYOUT_CHANNEL_UNAVAILABLE 挂起,严禁静默降级 mock 发假钱;Nacos trade.payout-channel 单开关;MockPayoutClient 同步直通
- reward 现金发放做真(community seam+trade):recordIncome(TIP,reward.id,shareRate=1.0) uk_source 幂等 + status CAS 0→1 + granted_ref
- 广告回调验签(ad):CallbackAdProvider sandbox + /app-api/ad/reward/callback 验签骨架,真实 csj/gdt 留 SPI 位
- 收益端点:/app-api/trade/my/income-summary(解 G2 看板收益,读 game_trade_income 归属隔离)
- DB V14:withdraw 加 transfer_ref;pay 模块 pom 未接运行态(留合并点);错误码段 ad=1-111/trade=1-106 不越界
- verify:87 单测绿(ad24/trade41/community22)+ staging mock e2e门真跑(广告→结算→提现→mock打款回调1→2)+ 4条对账断言全HOLD;红线读码核验通过。欠验=结算job真跑(staging XXL关)+真UI走查 留合并点
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:01:19 +00:00
zizi
c74aa7dab6
refactor(rename): yudao 命名空间整体改名 com.wanxiang.huijing(公司 Wanxiang / 项目 Huijing)
...
- 包根 cn.iocoder.yudao → com.wanxiang.huijing;业务 cn.wanxiang.game → com.wanxiang.huijing.game(统一单一命名空间)
- groupId cn.iocoder.cloud → com.wanxiang;artifactId + 模块目录 yudao-* → huijing-*(含 huijing-server/framework/gateway/dependencies)
- 类名 Yudao* → Huijing*(44 个);配置前缀 yudao.* → huijing.*(Tier A 标识符 + Tier B 配置)
- 排除不动:Flyway 迁移脚本(不可变历史,保 checksum)、上游归属 URL/LICENSE、DB 表名(真表 system_*/game_*,无 yudao_ 业务表)
- 范围:game-cloud + game-admin。范围外 contracts/docs/.agents 的 yudao 引用=文档漂移,后续单独清(Opus H4 判不阻断)
评审:Opus 对抗复审(逮 Flyway checksum Blocker→已修排除迁移);Codex 未同步交回。
本地验证:apply 幂等✓;范围内真代码残留 0(16 处 \bYudao 均在已排除迁移注释内)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:05:48 +00:00
zizi
f0c4e810cb
fix(passport): e2e双P0修复——匿名写路径审计列兜底×5写点 + 手机号/验证码明文日志两面合围
...
- P0-1: @PermitAll匿名无登录态→DefaultDBFieldHandler不填creator/updater撞NOT NULL(V11漏继承审计列,与M-b执行器updater雷同根)。修=Service写点显式兜底"0"(注册/会话开局/会话收尾UPDATE形态/遥测batch+beacon共点/ad计费台账),归属维度user_id/anon_id/creator_user_id不受影响
- P0-2: ApiAccessLogInterceptor非prod无条件打印原始请求体(不读@ApiAccessLog注解,framework不可改)→staging抬该logger至WARN关控制台面+三端点sanitizeKeys脱敏持久化面;SmsSendConsumer脱敏mobile、code不打印
- 单测: 4模块匿名落库creator='0'断言+登录态不强置负向对照
- e2e第一轮判定: E3/E8/E12/UI过门;E2/E4/E6/E7/E1/E13被P0-1阻断待二轮重跑
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:31:42 +00:00
zizi
b0850a2ad9
feat(passport): 鉴权建设波——V11契约+system passport子包+14端点@PermitAll+白名单挂点+剔除桩+前端登录守卫
...
- 契约先行: V11.0.0 双落点(game_player/game_invite_code/runtime_session匿名兼容ALTER) + passport.yaml(4 app+4 admin) + events登记user_login
- B1 system侧: passport独立子包(fork隔离), 验证码+邀请码旁路登录注册一体, OAuth2 MEMBER token(client=default已核), 错误码1_002_090/091远段, PlayerApi @Primary本地化(mock豁免裁决=无行+mockEnable放行), R6限频(IP 10次/h+Redis日/时双闸), 25单测
- B2 存量: @PermitAll恰好14端点(主agent grep复核, 不放行名单零触碰), 匿名session(player_user_id可空+anon_id), 白名单5挂点(studio/aigc/project), ad计费限频, telemetry剔除桩(照落库不进聚合+Redis降级放行), EnvelopeReqVO文案回写
- F1 前端: 登录页两Tab+占位协议, isRealLogin守卫(isLogin恒真不可用), 401统一拦截, 互动转正onInteract单入口gating, user_login遥测双带; test1批跑路径原样保留(主agent复核)
- 三面对抗核验全pass零blocker; 构建门待mini-desktop(本机禁构建铁律)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:40:10 +00:00
zizi
43fce856d7
feat: Wave2 变现域 ad+trade 后端建成验证 + game-admin 运营台脊柱
...
后端(主 agent 独立复跑验证,非采信子 agent 自报):
- 新建 game-module-ad(广告引擎)+ game-module-trade(分账/结算/提现),克隆黄金模板 project
- 契约先行已锁:ad.yaml/trade.yaml + Flyway V6/V7;ad 计费 uk_trace 收紧为 (trace_id,event_type,tenant_id) 防 reward 被 impression 静默吞掉
- ad↔trade Feign seam(AdRevenueApi.getUnsettledRevenue/markSettled)+ project-api 归因(getCreatorUserId,game 模块首个跨模块 Feign,仿 yudao DictDataApi)
- AdProvider SPI(mock,留 csj/gdt 注入位);资金安全:金额用分/uk 幂等/状态机 CAS/防超扣/T+1 结算补偿
- pay 不建,复用 yudao-pay 后置(Doc B:收单归 pay、钱包提现归 trade;MVP 钱财闭环 ad→trade 不经收单)
- 验证:mvn -pl yudao-server -am compile 全量 BUILD SUCCESS;ad 15 + trade 24 = 39 单测绿;huijing 残留=0、裸 select*=0
前端 game-admin(运营后台):
- 克隆 yudao-ui-admin-vue3 裁剪(删 crm/erp/mall/mes/iot 等无关业务模块)+ 5 个 MVP 运营页接 admin-api(审核/精选/看板/广告位/提现审核)+ mock 兜底
- 构建验证移至 mini-desktop(本机 5.8G 内存 OOM,见执行 spec)
文档:HJ-PAR-002 review+execution 双 spec + Workflow 编排脚本
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:20:17 +00:00