lili
1981a6be01
feat(storage): 闭合 Agent 到 Runtime 的 OSS 游戏链路
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
增加不可变源码检出、两阶段 finalize/activate、Runtime 同源对象读取与 iframe 安全边界,并用 fail-closed CI 门固定契约。Git 仅提交平台实现、契约、迁移和 SoT,不包含具体游戏源码、素材、bundle 或验收证据。
2026-07-30 05:21:44 -07:00
lili
bcb7fec906
fix(release): bind dogfood gates to runtime state
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
2026-07-23 02:49:08 -07:00
lili
5ad0d26daa
fix(release): pin dogfood trust boundaries
2026-07-23 02:30:36 -07:00
lili
0551b3552f
fix(release): close final dogfood safety gaps
2026-07-23 01:43:41 -07:00
lili
f7d0942ab6
feat(project): bind runtime artifacts to versions
2026-07-23 00:42:40 -07:00
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
640d9268c0
feat(release): enforce dogfood publish safety loop
2026-07-22 21:37:43 -07:00
lili
2bc8c86c47
feat(feed): 新游戏发布汇入主混合流——发布基线 zone0 恒写 + 非零专区补写双写(创始人 2026-07-05 拍 A)
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
发布编排原 zone_id = launch_zone_id 或 0 二选一:创作者选了非零专区(必填字段)则
游戏只落该专区排序行、不进 zone0 主混合流,而 /feed/stream 服务 zone0——内测玩家
默认流看不到新游戏(R5 走查暴露)。改为双写:发布恒写 zone0 主流基线 + 若创作者
另选非零专区再补写该专区一条(uk_game_zone 视作不同排序行,双写互不冲突,同发布事务原子)。
顺带消除既有潜伏不一致:telemetry 算分回灌固定打 zone0,原来非零专区游戏在 zone0
无基线行 → 回灌恒跳过、永不刷分;zone0 基线补齐后回灌可正常刷分。
抽出 writePublishBaseline helper;DTO zone_id javadoc 同步双写语义;
补 publish 路 3 单测锁分流(非零专区双写 / zone0 单写 / null 回落单写)。
PublishOrchestrationServiceImplTest 本机实跑 6/6 绿(3 原 unlist + 3 新 publish)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 18:27:12 -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
c7a58b8c45
feat(project,telemetry): P-OPN-08 创作者公开聚合API@PermitAll(仅status==4·聚合统计无PII)
...
新增创作者公开主页两只读端点(契约+实现+单测,全 additive):
1) GET /app-api/project/public/creator/{creatorId} @PermitAll
→ PageResult<PublicCreatorProjectRespVO>{id,title,summary,coverUrl,ageRating,
playCount,likeCount,publishTime,creatorId,creatorName};仅 status==4 已发布作品。
2) GET /app-api/telemetry/public/creator/{creatorId}/summary @PermitAll
→ {creatorId,publishedCount,totalPlayCount,totalLikeCount};对该创作者 status==4 作品聚合。
跨创作者公开读(#1 正确性风险)处理:本仓 DataPermission 仅注册 system DeptDataPermissionRule
(仅作用 AdminUserDO/DeptDO 表),game_project 无任何 DataPermission 规则 → MP 拦截器不追加过滤;
project 的"创作者只见自己数据"一向由 Service/Mapper 手动 eq(creatorUserId) 强制而非拦截器。
故公开读只需按"目标 creatorId(路径参数,非登录人)"+status==4 等值即天然跨创作者,无需 @DataPermission(enable=false)。
口径:publishTime 取 update_time 近似(项目表无 publish_time 列,同 count-published 口径);
公开统计经 project-api getCreatorPublishedSummary 取(发布态权威+play/like 计数列均在 project);
creatorName 经既有 AdminUserApi.getUser().nickname 尽力解析(查不到为 null,无 PII)。
单测(Mockito,test goal GREEN):
- ProjectMapperTest(新):SQL 形态守卫——公开查询恒 status==PUBLISHED(4)+按 creator_user_id 过滤,不放行下架(5)/封禁(6);
- ProjectServiceImplTest(+5):跨创作者读(走 selectPublishedPageByCreator 非 selectMyPage)/creatorName 兜底/空/聚合/零;
- GameStatServiceImplTest(+2):跨创作者经 project-api 聚合(不走"我的作品"归属链)/null DTO 兜零。
mvn -pl game-module-project/...-server,game-module-telemetry/...-server -am test → project 32/32 + telemetry 46/46 绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:43:08 -07:00
lili
240a18fc33
feat(trade-api/aigc-api/project-api): U5 看板只读count方法(additive)
...
为 U5 经营看板补三个跨模块只读数据源 seam(均 additive,删除后各模块既有单测仍绿):
- trade-api:新增 TradeApi Feign 接口 + TradeRevenueReportDTO + trade-server TradeApiImpl
(@RestController @Primary 委托既有 IncomeService.sumGross/sumNet + WithdrawService.sumPaidAmount,
口径同 /admin-api/trade/report/revenue)→ 看板 GMV。
- aigc-api:AigcApi 加 countSucceededTasks(start,end)(impl 委托新增 AigcTaskMapper.countSucceededBetween:
status=succeeded 且 finish_time 落区间,零 DDL)→ 看板生成量。仅 additive:不动 SAA/executor/生成代码。
- project-api:ProjectApi 加 countPublished(start,end)(→ ProjectService.countPublished → 新增
ProjectMapper.countPublishedBetween:status=PUBLISHED 且 update_time 落区间,零 DDL)→ 看板发布量。
时间维度为 update_time 近似(项目表无独立 publish_time 列,已注释说明)。
跨模块只读,无任何写;自然日端点在各 impl 展开为全天 LocalDateTime 区间。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:05:56 -07:00
zizi
d64dcc9080
feat(studio): U1 studio 生命周期编排 create/modify/extend(B6) + V19 modify 持久化
...
6c6g 后端 Tier0 计划 U1(docs/plans/2026-06-17-001-...)。生成主线 modify/extend 生产可达。
- /studio/{create,modify,extend} + 5 VO(对齐 studio.yaml)+ StudioServiceImpl 三方法
(create=draft+generate 复用;modify/extend 经扩展 aigc seam 委托;mode×target 锁定映射校验;白名单+归属门)
- aigc seam:AigcGenerateReqDTO/VO/AigcTaskDO additive 扩 modify 四件套;AigcGenerateExecutor.putModifyFieldsIntoJob
接进 §6.1 job(键名对齐 buildInputs);project seam getVersionOwnerUserId/getVersionGameId(归属边界)
- V19.0.0__aigc_task_add_modify.sql:game_aigc_task 加 modify_mode/base_version_id/modify_patch +
AigcTaskDO @TableField 持久化映射 → modify 四件套跨异步 tick 真抵达 buildInputs(化解执行器从 DB 重建无内存续传)
- 错误码 1-112-003-*;additive(存量 modify_mode='' 即现行 create 分流,零破坏)
验证:mini-desktop 编译绿 + 54 单测全绿(Studio 27/Executor 22/Project 5);V19 SQL 结构绿(Flyway-apply 留部署验);
codex 评审 MERGE-WITH-FIXES(0 P0;P2 注释已修)。follow-up(codex P1,计划已 deferred):
idempotency 去重(契约缺省=不去重,present-dedup 待幂等基建)、taskChain.baseVersionId 轮询回显(即时已回显,轮询待小补)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 20:39:05 +00:00
zizi
7534bdf9b7
feat(create): generic 桥接——一句话创作无需选模板即可生成(入口归一缺省 templateId=generic)
...
背景:W-CLEAN 废玩法模板层后 template/list 返空,创作页「开始生成」因 canSubmit 依赖
「必须选中模板」而恒禁用;后端 @NotBlank/同源白名单/派发分支/落包一致性四道硬约束又要求
templateId 必填非空。核心思想=在入口把缺省 templateId 归一为 "generic"(恰好命中
SUPPORTED_TEMPLATE_IDS=[generic] 单一通用口径,品类区分留 prompt 层),四道约束以「恰好
generic」全部一致通过,DB 零改(template_id NOT NULL DEFAULT '' 归一后落 generic)、后端业务零改。
契约层(2):aigc.yaml AigcGenerateReqVO required 去 templateId、project.yaml
ProjectCreateReqVO required 去 templateId,templateId 描述标注「可选,缺省 generic」。
后端层(归一 generic):
- AigcGenerateReqVO/ProjectCreateReqVO/StudioDraftCreateReqVO 去 templateId @NotBlank +
requiredMode REQUIRED→NOT_REQUIRED;
- AigcTaskServiceImpl.submitGenerate 在 validateTemplateExists 前归一(validateTemplateExists 不改);
- ProjectServiceImpl.createProject(BeanUtils.toBean 后)归一;
- StudioServiceImpl.createDraft 原「空 templateId 抛 STUDIO_TEMPLATE_REQUIRED」改为归一 generic;
- ProjectApi.createProject 的 templateId @Parameter required 放开(契约面一致避免 drift)。
前端 game-studio(去模板门):types.ts 两请求体 templateId 改可选;store/create.ts、api/aigc.ts
generate 入参改可选;Create.vue canSubmit 去「必须选中模板」条件(prompt 非空即可提交)、
onSubmit 缺省传 'generic'(空态下也能提交)。
测试校正:StudioServiceImplTest「空模板抛错」→「空模板归一 generic 透传 project」(行为变更)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 04:05:39 +00:00
zizi
b51025e14f
feat(telemetry): 创作者侧 stats 读端点(goal G2)——/app-api/telemetry/my/{summary,trend}
...
- 新增创作者侧只读端点:summary(跨我的作品聚合 totalPlay/totalComplete/completionRate)+ game-stat/trend(七日按日)
- 归属隔离:creatorUserId=getLoginUserId()(token,非前端入参)→ 经 ProjectApi.getMyGameIds 取我的 gameId 集合 → 仅聚合这些;空作品短路、completionRate 除零兜 0、days 夹紧[1,90]
- project 加 getMyGameIds(-api seam,镜像 ad/feed 既有消费范式);复用 game_telemetry_game_stat 聚合
- verify:telemetry 38 单测绿 + project test-compile 绿(mini);广告收益由 G1 income-summary 供(遥测表无收益列,已诚实占位)
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
3c6e3d4ad0
feat(feed): 修 feed 卡 authorName 恒 null——三层补作者昵称回填(链路③⑤走查收口)
...
curl 实测 feed/stream 9 卡 author 全 null:契约 feed.yaml:216 与 FeedCardRespVO 早有
authorName 字段,纯三层缺实现。补:
- ProjectFeedMetaDTO 加 authorName 字段(来源 creatorUserId 查 system 用户 nickname)
- ProjectServiceImpl.getFeedMeta 经 AdminUserApi(单体内本地 bean·非网络 Feign)单查回填,null 安全
- FeedServiceImpl.backfillCardMeta 加 setAuthorName
最小改动:复用 PlayerApi 既有跨模块本地 bean 范式,不动 pom(project-server 已含 system-api)、
不改批量(单体本地查非真实 N+1)。编译 BUILD SUCCESS(28 模块)。运行时昵称回填待 Phase 2
重部署后 CDP 走查实证。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 08:42:20 +00:00
zizi
737e6d5f5a
feat(wave4): community通知底座+biz轻量lead form 双模块建成(HJ-WAVE4-EXEC-001·代码就绪待工程门)
...
§0资源预占(serial·opus)+community(C1-C12)‖biz(B1-B9)三相Workflow编排,主控静态验证门已过(上游三挂点surgical+Boolean blocker已解+边界干净)。本机禁编译,工程门留mini。
community(5 P0·通知底座):
- 站内信(投递幂等/已读归属校验/未读数)+等级引擎(published_count原子自增UPDATE+里程碑uk幂等插reward)+CommunityNotifyApi@Primary本地实现
- 3上游同进程notify挂点(均事务提交后+try-catch吞异常仅error log):
aigc生成完成(回查task终态SUCCEEDED&&versionId!=null,非result==TRUE)/project审核结果1·2+发布计数/trade收益首次入账
- R3系统身份写防护:CommunityNotifyApiImpl入口LoginUser(id=0)+finally clearContext,防定时任务线程updater NOT NULL 500
biz(6 P0·轻量lead form):
- 询单/报价/进度/验收四表+单线性五态状态机(canTransit仅相邻单跳)+demo可预览负路径降级(注入RuntimePackageApi,失败不透传500)
- 7 app端点(getLoginUserId归属隔离)+7 admin端点(@PreAuthorize biz:*);BizTemplateService返clicker/merge/idle/tycoon 4可玩模板
- 权限seed=独立sql/biz_menu.sql(不进V13保两副本字节一致)
§0地基: Flyway V12(community三表)/V13(biz四表)各两副本md5一致+错误码段1_107/1_110+community.yaml/biz.yaml契约+root pom两module+yudao-server pom两依赖
已知留债(诚实登记·待工程门/staging实测兜底):
- mini工程门(mvn编译/单测/Flyway migrate/@Primary装配/Swagger)未跑——'骨架编译过≠可验收'
- 系统身份写雷+DO↔BIT映射单测mock测不到,须staging两链路实测
- 上游既有单测(trade/aigc)未mock新@Resource会打被吞NPE日志(断言仍绿)
- P-INC-01尽力计数at-most-once(评审版已认非缺陷)/UNLIST第二路径不通知(非P0)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:28:01 +00:00
zizi
29564c8eb7
fix(publish): 修创作链路发布 UI 两缺陷——生成回写 currentVersionId + getZones 落实(HJ-FE-WALK-001)
...
UI 走查逮到、阻断真人 UI 发布的两个后端缺陷(编排器走 task.versionId 旁路掩盖):
Bug A: 生成成功未回写 project.current_version_id
- GameVersionServiceImpl.createForPackage 建版本后调 bindCurrentVersion 回写(幂等+新建两路径)
- 原先该字段只在发布方法置位→生成后未发布阶段恒 null→Publish.vue 取不到 versionId/门禁⑤失败
- 安全:feed/play 用 game_feed_rank 的 versionId 不读 currentVersionId,对已发布游戏回写无副作用
Bug B: feed/zones 返回空(getZones 是 Collections.emptyList 桩)
- FeedServiceImpl.getZones 落实直查 game_zone(type∈(1,2) AND status=1,sort 升序→ZoneRespVO)
- 新增最小只读 GameZoneDO + GameZoneMapper(MVP 既定"同库可直查 game_zone")
- 租户:GameZoneDO @TenantIgnore + staging tenant.enable=false→tenant_id=0 种子专区可取(实证)
- 原桩致发布页专区选择器恒"加载中…"、launchZoneId 必填缺失而无法发布
子代理(Opus)执行+主 agent 核验(diff/租户口径/staging tenant.enable=false 实证);待 mini 构建+重部署+重走查闭合链路②。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 05:55:15 +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
b87511b967
feat(data-loop): 数据回路三修 + postcheck翻页修复 + M-b/小波双spec + 鉴权评审版
...
- fix1 曝光中性: 零增量事件不写聚合不建全零行, 仅 engagement 事件触发 quality 重算(修曝光清零 bug)
- fix2 原子累加: GameStatMapper.insertOrAccumulate 单语句 ON DUPLICATE KEY UPDATE 替换读改写丢增量
- fix3 下架编排: reviewProject UNLIST 委托 unlist 单事务(项目4→5+feed_rank 全分区下线), 填 R7 缺口
- 修 batch-001 P1: backend_gw.feed_find_game cursor 翻页(原 size=50 超后端单页上限30 致 400 误熔断)
- 文档: M-b 生成下沉 execution(HJ-AGENT-LOOP-EXEC-002 已审定+§16 裁决) + 数据回路小波 execution
+ 真实鉴权与匿名玩家 review(双镜头 12 条意见全修订) + EXEC-001 §16 建设期裁决增补
三修均经 mini-desktop 隔离克隆构建: telemetry 17测/project+feed 39测 全绿+逐修对抗核验 pass
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 01:05:55 +00:00
zizi
ab0037cd4b
feat(feed): 出流卡片回填 project 本体元信息(title/cover/计数) — 修卡片 title/cover=null
...
缺口:feed 不持久化游戏本体元信息,buildStream 出流卡片 title/coverUrl/playCount/likeCount 一直为 null(跟踪项①),demo 不可演示。
修复:ProjectApi 新增 getFeedMeta(local @Primary, 契约 -api 路径) + ProjectFeedMetaDTO;ProjectServiceImpl 读 game_project 映射;FeedServiceImpl.buildStream 出流(可见态过滤后)按 gameId 去重回填本体字段,游戏不存在则留空不阻断。不碰 project -server 依赖、不动数据回路。
验证:feed18+project15 单测绿(含 title 回填断言);staging 重部署后 feed/stream 返回真标题且 B(q88)仍在 A(q28)前(数据回路状态存活)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 16:08:47 +00:00
zizi
1740d8c226
feat(B1): 黄金闭环后端实现(step②) — 发布编排/同步写数据回路/PackageStore/version 链
...
step② 五模块 impl(编译验证待 mini-desktop,与 step① 合并编译):
- project: PublishOrchestrationService(@Transactional 六步原子,注入 Feed/RuntimePackageApi 本地 bean=H5)+GameVersion DO/Mapper/Service(genTaskId 幂等)+ProjectVersionApiImpl+reviewProject α(REVIEWING→PUBLISHED 跳过 APPROVED)+ProjectApi.getStatus
- feed: FeedApiImpl(@Primary)+upsertRank 两 mode 分流(PUBLISH_BASELINE 写前校验可见态前三条件 / QUALITY_REFRESH 保留 boost/pinned/status)+buildStream 二次过滤+去 isGamePublished 默认放行
- runtime: RuntimePackageApiImpl(@Primary 委托 publish/getStatus)+PackageStore(DB impl 读写 package_json)+manifest 端点(原样 JSON 不包 CommonResult)
- telemetry: EventIngestServiceImpl 同步写本地事务(eventId 幂等→仅真插入累加 stat→算 quality_score→FeedApi 回灌→置已聚合,失败整批回滚);MQ 仅留 TODO
- aigc: completeWithVersion(taskId 幂等)
主 agent 独立核验: 发布编排事务原子/reviewProject α/同步写逻辑 已读核;守门④无环复检通过;新增 ProjectApi.getStatus+RuntimePackageApi.getStatus(enforce 只读)
已知限制(T+1 非阻断): stat 累加为 MP select+update 非原子,并发可能丢增量(顺序 A/B 不受影响,真流量前改原生原子 upsert)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 14:21:06 +00:00
zizi
e670eaf476
feat(B1): 黄金闭环契约先行基座 — 接口/DTO/V10/契约 yaml/错误码/pom
...
contract-first 基座(B1 step①,编译验证待 mini-desktop,与 step② 合并后编译):
- feed-api: FeedApi.upsertRank + FeedRankUpsertReqDTO(UpsertMode 分流) + ApiConstants
- runtime-api: RuntimePackageApi.publish + ApiConstants
- project-api: ProjectVersionApi.createForPackage + DTO + 错误码 PROJECT_PUBLISH_PACKAGE_NOT_READY
- V10: game_runtime_package.package_json + game_telemetry_event.event_id/uk_event_id(替换 uk_dedup);仅 contracts 源 + yudao-server 单一执行副本(守门②)
- 契约 yaml: events/telemetry 信封加 eventId + runtime /manifest 端点(原样 JSON 不包 CommonResult)
- pom: project-server→feed/runtime-api、telemetry-server→feed-api(守门④无环已核)
主 agent 独立核验: V10 双副本一致 / uk_dedup 索引名 / 错误码无碰撞 / 守门①②④ / telemetry x-mq 幂等口径同步改 eventId 避免契约自相矛盾
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:50:30 +00:00
zizi
6c8844f3be
feat(wave3-phaseC接入): project.publish 注入 ComplianceGateApi + 封禁下架联动 seam
...
主 agent 串行收口黄金模块(project 15 测 + compliance 8 测全绿):
- R1 接入:project-server 依赖 compliance-api;submitPublish 注入 ComplianceGateApi.evaluate,
映射 key=compliance 的 GateResultVO(block→拦/review→放行进审核/pass→放行);admitted=gates 全 pass
- R3 接入:ProjectApi 加 unlistIfPublished seam(仅 PUBLISHED 以系统审核人调既有 reviewProject 下架,
复用状态机不重写=D2);compliance UserBanServiceImpl 封禁游戏时联动调用(失败不回滚封禁主操作)
- D2 锚点:reviewProject/resolveReviewTargetStatus 字节级未改写,三测断言未动
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 02:31:32 +00:00
zizi
096020fa0a
feat(wave3-phaseA): project 侧跨主线收口(publish 唯一化+ProjectApi seam+GAP-4+治理+V6V7 G0)
...
Phase A 串行收口(主 agent 独占改黄金模块,11 单测绿),为 Phase B 并行建模块铺底:
- R1 publish 唯一化:submitPublish void→ProjectPublishRespVO{admitted,gates};门禁收集不抛、
block→admitted=false 不改状态机;compliance gate 留 Phase C 接入 seam(TODO,不 import)
- R2 ProjectApi seam 单点定稿:+getCurrentVersionId(GAP-3)/+createProject(写类RPC 显式 creatorUserId)
- GAP-4:events.schema.json 信封 envelope/user 由 snake→camelCase(与 telemetry/前端 SDK 对齐,破坏性窗口收敛)
- R4 治理:登记 studio=112/Flyway V8(README §4/§1/§2 + CLAUDE.md;与前端仓 game-studio 区分)
- R6 G0:V6/V7 集中复制到 yudao-server/db/migration(diff-identical)
- project.yaml publish 响应同步结构化;D2 锚点 reviewProject/game_review_record 未动
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 01:37:06 +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
zizi
9e95a66ea6
refactor: 技术命名空间 huijing→wanxiang 全栈落地(代码+契约,原「只改文档」决策反转)
...
- Java 包 cn.huijing.game→cn.wanxiang.game:126 .java + 15 目录 git mv(保留历史)+ Application scanBasePackages/@MapperScan + yaml type-aliases
- SDK HuijingGameSDK→WanxiangGameSDK + postMessage channel huijing-game-sdk→wanxiang-game-sdk(契约 + 前端 host/sdk/inject/bridge)
- 契约 contracts/ 同步(sdk-interface.d.ts / runtime.yaml / game-package.schema / $id URL / V3 SQL 注释)
- 主 agent 独立验证全绿:后端集成编译+55 单测(cn.wanxiang)、前端 build+/browse 冒烟(WanxiangGameSDK+demo 911 像素+遥测 200)、残留 huijing=0、Flyway 5 迁移 diff-identical、yudao cn.iocoder.yudao 2167 文件未误伤
- 保留 yudao 框架 cn.iocoder.yudao + Maven groupId cn.iocoder.cloud
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 10:16:52 +00:00
zizi
c4e2d73300
feat(backend): Wave1 后端脊柱 5 模块 + 8 类契约 + yudao-cloud fork 接线
...
- game-cloud:yudao-cloud fork(裁剪至 system/infra)+ 5 业务模块 project/aigc/runtime/feed/telemetry
- 黄金模块 game-module-project + 克隆 4 脊柱模块;46 单测绿 + 41 模块集成编译绿
- contracts/:8 类契约锁定(5 API YAML + sdk-interface.d.ts + game-package.schema + events 等)
- yudao-server 接线:全局组件扫描 + @MapperScan + Flyway V1-V5(baseline-version=0)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 09:10:05 +00:00