lili
|
ac7ffe4a92
|
feat(telemetry): U5 经营看板聚合+导出 + 营收报表导出
经营看板(跨模块只读聚合,缺数据兜底不 500):
- 新端点 GET /admin-api/telemetry/dashboard(telemetry:dashboard:query)→ DashboardRespVO,聚合四指标:
DAU(本模块 game_telemetry_event 去重活跃身份:登录 user_id + 匿名 anon_id,取 statDateEnd 当日,
新增 TelemetryEventMapper.countActiveIdentities)+ GMV(trade-api)+ 生成量(aigc-api)+ 发布量(project-api)。
- DashboardServiceImpl 容错:每个数据源独立 try-catch + CommonResult 解包兜底——任一源不可用→该指标兜底 0
+ degraded/degradedSources 标记,整体不 500(看板可用性优先);正常空数据(data=null)不算降级。
- 导出 GET /admin-api/telemetry/dashboard/export-excel(EXPORT 审计)单行导出看板快照。
- telemetry-server 加 trade-api/aigc-api 依赖 + starter-excel。
营收报表导出:TradeAdminController 加 GET /admin-api/trade/report/revenue/export-excel
(trade:report:export + EXPORT 审计),抽 buildRevenueReport() 与 /report/revenue 共用口径避免漂移。
测试:DashboardServiceImplTest 6(全可用聚合/单源抛异常兜底/CommonResult非0兜底/data=null不降级/
全跨模块故障DAU仍可取/跨模块只读 never 写方法)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 11:06:57 -07:00 |
|
lili
|
f85ae6c434
|
feat(feed): U5 限曝光降权 + 精选池导出
限曝光(boost 的反向运营操作):
- Flyway V25.0.0 加 game_feed_rank.exposure_limit DECIMAL(10,4) NOT NULL DEFAULT 0(additive,
镜像 contracts/db-schemas);FeedRankDO 加 exposureLimit 字段。
- 排序口径升级为 sort_score = quality + boost - exposure_limit,统一收敛在 deriveSortScore()——
setFeatured/setExposureLimit/发布基线重发布/算分回灌四写入点共用,保证 boost/exposure_limit 两个
运营维度在任意写入路径都被保留(限曝光穿越 telemetry 算分回灌存活,已单测验证)。
- 两层效果:① 普通降权(0<x<9999)持久化进 sort_score 使游戏下沉(cursor 分页仍正确);
② 硬限曝光哨兵(>=9999)在 buildStream 出流处剔除(复用既有二次过滤续取机制,不动 status、可随时改回)。
- 新端点 POST /admin-api/feed/exposure-limit(复用 feed:featured:update 权限 + @ApiAccessLog UPDATE 审计),
门禁=仅已发布且已有排序行(不新建孤儿降权行);错误码段 1-103-005-***。
导出:GET /admin-api/feed/featured/export-excel(feed:featured:export + EXPORT 审计)经 ExcelUtils
导出精选/限曝光排序覆盖层运营字段;空数据写表头。feed-server 加 starter-excel 依赖。
测试:FeedServiceImplTest 25→35(限曝光门禁/降权扣减/硬限曝光出流剔除/普通降权不剔/回灌保留限曝光/导出列表空与非空)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 11:06:35 -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 |
|
lili
|
6a9bd4d349
|
fix(saa): 6c6g 评审整改——P1 K_STATUS 清零 + P2 stage2 fallback 注释
P1(真修):renderNode 起手 out.put(K_STATUS,"") 清 stale 状态——checkpoint/saver 跨 run 复用 state 时,
上轮 giveup 写的 K_STATUS="failed" 会残留,下次 modify 进来 modifyRouter 首检 K_STATUS 误判失败、
把 gamedef 确定性点改错误路由到 END。
P2(语义·仅注释):generateNode fallback 处加注,说明 stage2 升档后回退档仍取廉价档(MiniMax-M3)是
「可用性优先于本次升档边际质量」的有意取舍(强档超时也要出包),非疏漏。
验证:mvn -Dtest=SaaStudioGraphTopologyTest,SaaStudioNodesRegressionTest → Topology 30/30 + Regression 8/8 全绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 09:20:49 -07:00 |
|
lili
|
80aaa116ab
|
feat(game-runtime): clickable 声明式点击基元(harness 探针证 9/9)+ tap-targets prompt 迭代——治便宜模型 tap-handler 顽疾
plan 2026-06-18-001 U3 迭代3-4轮(据快走查根因)。
根因(全budget+stage2 都不解,3轮prompt不解):便宜/强模型均**顽固把 tap 命中门控在分离 state 实体/计时器/turn 上**
→ 盲点驱动点不中 → tap-targets 类系统性 E_live/F_wiring/G_input/H 挂。即「让模型写 tap-handler」这条路便宜模型走不通。
引擎线根治(gd-runtime.js):新增 **clickable 声明式基元** `{kind:'clickable',score?,mark?:{shape,color,r},hitW?,hitH?}`——
运行时内置:本帧点中带此组件且 !occupied 的实体 → 自动翻 occupied+spawn 标记(可见)+计分+fx。**离散点击类声明它即可、免写 handler**。
验证:gd-runtime 单测 16(含 clickable 派发) + 全套 60/60;**手写纯声明式(behaviors:[])clickable tap-targets gamedef 过 harness 9/9**(E_live distinct=8/F_wiring/G_input/H 全过)——证基元+管线正确。
GAMEDEF_SYSTEM:教 clickable(替「写 tap-handler」)+ 参照2 改纯声明式 clickable few-shot(经探针证 9/9)。
runtime-api-2d.md:补 clickable 组件文档。
**关键测量定论(终结本机迭代)**:便宜模型 tap-targets 单管线生成**高方差**(同 brief 一轮 8/9 一轮 5/9)——
N=1~2 小样 lili-mac 早读**信噪比不足**,无法可靠优化「模型产出过门率」(我前几轮在追噪声)。
**管线/运行时/约定已证正确(手写金样两品类均 9/9)+ 引擎补了 clickable 基元**;**模型产出 cutover 率是统计量**,
需大样+全 repair 预算 → **authoritative=mini-desktop SaaFullGraphE2eTest -Dsaa.e2e=1**(多 brief+5+3 repair+stage2)。
快走查工具:加 stage2 救场升档(QC_STAGE*)+ gamedef assert 字段 coerce 到 score(治 design 造 moves/totalRound 等取证读不到字段)。
设计决策待 6c6g:design↔gamedef 的 assertAfterPlay 字段词汇契约(design 应约束到 gamedef 暴露集 score/remaining,
或运行时暴露更多)——触共享 DESIGN_SYSTEM。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 06:13:18 -07:00 |
|
lili
|
c24b7fb4d2
|
fix(saa): GAMEDEF_SYSTEM 加 tap-targets few-shot(harness 探针证 9/9 正确)+ 快走查 repair 可配
plan 2026-06-18-001 U3 迭代2轮:据 cutover 早读「tap-targets 类系统性 5/9(E_live/F_wiring)」根因诊断+整改。
根因决断(harness 受控探针,无 LLM):把**手写 known-correct tap-targets gameDefinition**直接过全 harness
→ **9/9 真过**(E_live distinct=8/8、F_wiring 12 引擎调用)。**故运行时+装配器+tap-targets driver+约定全正确**;
whack/tictactoe 失败 = **便宜模型生成质量**(tap-handling 写错:点击未判中→无 spawn/fx/计分→画面恒定),非基建/集成 bug。
GAMEDEF_SYSTEM 加 tap-targets few-shot(SaaPrompts.java):tile 网格每格 tags:["target"]+idx+occupied,
justTapped→pointer overlap 判中→occupied 翻+spawn 标记(可见)+addScore+fx;win=score>=N。
few-shot 本身经探针证 9/9 正确(教对 idiom);实测使模型确给 target 打标(gd-whack 9/10 tagged)。
残留 tap-handling 精度=R3 便宜模型质量,靠 **repair 回环(真图 5+3 轮,本机只跑 3)+ stage2 升档(强档)** 解。
快走查:MAX_RETRIES 改 QC_MAX_RETRIES 环境可配(真图 maxRepairs=5,本机早读取 3 平衡时延)。
结论:**gamedef 路两大品类(realtime/physics + tap-targets)路径均证正确**;首攻便宜模型质量随品类波动,
cutover 率 = repair 预算 + 模型档 的函数(二者在 mini-desktop 全图满配)。≥60% authoritative=mini-desktop。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 02:42:41 -07:00 |
|
lili
|
da4801828d
|
fix(saa): GAMEDEF_SYSTEM driver 对齐加固 + 快走查升级全图镜像(design+gamedef)——据 U3 早读根因
plan 2026-06-18-001 U3 迭代1轮:据 lili-mac gamedef 快走查根因诊断,加固 GAMEDEF_SYSTEM 与九门 driver 的对齐。
快走查根因(design+gamedef 全图镜像, deepseek-v4-flash 单发无 repair):
- 路径端到端真成立:声明式 gameDefinition→装配→构建→真九门;pong 9/9(无 design 简版)、breakout 8/9。
- 单发首攻失败模式根因:① I_control——挡板命名变体(paddlePlayer≠gatespec 的 paddle)/ 只接键盘不接指针(driver 靠点指针位驱动)
/ 控制体 clamp 范围窄于 driver 边缘 tapX(340);② H_progress——设计稿 assertAfterPlay 引用取证读不到的自定义字段(totalRound)。
GAMEDEF_SYSTEM 加固(SaaPrompts.java,gamedef 路专属,不动现 SYSTEM):
- 命名逐字对齐 gatespec(挡板=paddle、球=ball,别用变体——读到 undefined=挂)。
- 可控体必须响应指针(`if(rt.input.pointer.down) paddle.x=rt.input.pointer.x`——driver 靠点指针位驱动,只接键盘=I_control 挂)。
- 进展落在可取证字段(score/remaining/实体位置;assertAfterPlay 别用读不到的自定义字段)。
验证:再跑 breakout 模型确按指令接指针控制(`if(pointer.down) paddle.x 追 pointer`)+ I_control tapX:50 已过;
残留 tapX:340 未过=首攻 clamp 范围精度,属**repair 回环**(已建:验收失败→verdict 回喂→重生成)territory。
快走查工具升级(gamedef_quickcheck.py):加 design 步(抽 DESIGN_SYSTEM+复刻 extractGatespec)→ 全图镜像
(classify 略/design→gamedef→装配→九门),getter truer 早读;prompt 抽自 SaaPrompts.java drift-free。
定位:单发快走查=首攻质量早读(非 cutover 门)。**≥60% cutover 门=全图含 repair 回环, authoritative=mini-desktop
SaaFullGraphE2eTest -Dsaa.e2e=1**(单发 0/6≠失败:repair 回环抬升率,本机不跑 repap 多轮)。密钥经 _client 读 .env 不入码。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 00:58:01 -07:00 |
|
lili
|
fd5b245baa
|
feat(saa): U2 接缝 + U3 真产 gameDefinition + U4 多模型回退(gamedef 路 additive 灰度)
plan 2026-06-18-001 U2(后端接缝)/U3/U4 · 后端线 · 真结构化生成上产线(saaSourceMode=gamedef,默认 factory 字节不变)。
U3 真产 gameDefinition:
- SaaPrompts 新增 GAMEDEF_SYSTEM(与现 SYSTEM 物理隔离,公平性铁律)+ buildGameDefMessages;内容=runtime-api-2d.md
约定提炼(schema/rt 面/命名约定/硬约束)+ 内联 scan-clean few-shot;硬约束由 build-from-source 静态扫描兜底。
- SaaStudioNodes.generateNode gamedef 分支:产结构化 gameDefinition(looseParse 脏 JSON 容错)落 K_SOURCE_PROJECT;
factory 路(含 regenerate 消费 base 源)字节不变。
U2 后端接缝(gamedef→可玩,scaffold/build/play/harness/build.mjs 全零改):
- build-from-source.mjs 加 CLI(node build-from-source.mjs <src> <out> / --validate;被 import 不执行)。
- SaaGenNodes.validateNode(gameRuntimeRoot,sourceMode) gamedef 分支:经 build-from-source.mjs 子进程校验+装配
sourceProject→factorySrc(下游 scaffold/build 零改消费);CLI 失败回喂 repair。
- 确定性点改解锁:modifyNode(sourceMode) gamedef 路真改源不 fail-loud;modifyRouter(sourceMode) gamedef
deterministic→validate(装配 patched 源重验)/ factory→fail-loud;assetNode 幂等(已有 assets 跳过,不覆盖点改)。
U4 多模型回退链:generateNode 主模型(含 stage1/stage2)耗尽 180s×3 重试后,回退同 role 跨家档(M_CODE/FIX_FALLBACK
=MiniMax-M3)再试;接现 callWithTimeoutAndRetry/looseParse/救场阶梯不另起限次。GenModels record 收敛入参。
线程:AigcExecutorProperties.saaSourceMode(默认 factory)→ SaaGraphDispatcher → SaaStudioGraph.build 9 参重载 →
assemble → generate/validate/modify/modifyRouter;8/7/5 参 build 旧重载 delegate "factory" 不破现调用。
worker prompt.py 不动(gamedef 为 SAA 路专属、http worker 仍 iife,无 shared prompt 漂移=无 split-brain)。
验收(lili-mac 快走查):mvn test-compile 过(main+test);模型无关单测 SaaStudioGraphTopologyTest 30/30
(含新增 gamedef deterministic→validate 路由证)+ SaaStudioNodesRegressionTest 8/8,零失败;build-from-source CLI
实证(--validate exit0/2、assemble 产正确 import 路径工厂)。**gamedef 全链过门率≥60% cutover 门需 NEWAPI_KEY+
mini-desktop(authoritative,未在本机跑)**。默认 factory 路行为字节不变(灰度 opt-in)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 00:05:18 -07:00 |
|
zizi
|
0db1d0da6d
|
fix(trade): AccountServiceImplTest grant 测试补 insert 回填 id(test-only)
原 impl agent 未跑测试漏:mock insert 只 thenReturn(1) 未回填自增主键,
grant() 返回 grant.getId()=null → assertNotNull 失败。改 thenAnswer 模拟 MyBatis 回填。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 04:02:46 +00:00 |
|
zizi
|
ec23ff61bc
|
feat(compliance): U4 R-ACC 政策正文页+申诉回路
codex 评审 MERGE-WITH-FIXES→修 P0(申诉重复提交守卫:STORED生成列pending_flag+uk_user_ban_pending局部唯一+@Transactional+DuplicateKey友好返回)+P1(@Transactional/@Size/@Min)。V22。plan 2026-06-18-002 U4。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 03:56:58 +00:00 |
|
zizi
|
ca53a0db0c
|
feat(trade): U2 R-ECON admin赋余额+会员订阅(独立流水表+幂等)
codex 评审 NO-MERGE→修 P0(订阅幂等漏洞:独立幂等账本表 game_trade_subscription_grant+uk_biz_no,延期前先写、同事务)+P1(VO @Size/totalIncome注释对齐/权限种子SQL)。V21。plan 2026-06-18-002 U2。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 03:56:58 +00:00 |
|
zizi
|
9f2b9f9feb
|
feat(feed): U1 R-FEED feed 游标分页真化((sort_score,id)复合游标+二次过滤续取)
codex 评审 MERGE-WITH-FIXES→修 P0(MAX_FETCH_ROUNDS 高过滤率提前到底丢数据:dbExhausted 区分库尾vs轮次中断,hasMore=overflow||!dbExhausted)。plan 2026-06-18-002 U1。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 03:56:57 +00:00 |
|
zizi
|
bf99662c3f
|
test(aigc): SaaFullGraphE2eTest — SAA 真全图 e2e 首证门控测试(U7)
U7 集成顶石的门控集成测试(-Dsaa.e2e=1 + NEWAPI_KEY)。构造真 5 参
SaaGraphDispatcher(stub callback 捕获 reqVO+latch,DataSource=null 内存
checkpoint,零 DB),顺序跑 N 条一句话 create job,真 LLM(new-api 五角色)+
真九门 harness(node/esbuild/Chrome,4320/9222 串行)+真 16 节点全图
(render→classify→design→generate→validate→scaffold→asset→build→play→player→nreview→emit/giveup)+真出口回调,测成功率。
首证(2026-06-18,mini-desktop):SAA 真全图 e2e 机制完整跑通、零 prod bug;
成功率 3/5=60%(贪吃蛇/接金币/躲障碍 succeeded,engineBundle≈211KB 含 __GameBundle;
打砖块败 I_control、点击消除败 F_wiring+H_progress,救场阶梯耗尽 giveup 真落盘)。
单款墙钟 3.5-16min(九门真玩循环+最多8救场轮固有,同 Python W-G1)。
→ 成功率 60% < 80% 转正门:cutover 未切(现 worker 主链保持默认,零回归)。
gap=难门生成质量(prompt 接地/gatespec/救场调优),W-G1 生成域调优单元。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 00:40:14 +00:00 |
|
zizi
|
679afa1c65
|
feat(aigc): U5 giveup 真落盘 + U6 modify regenerate 取base源真消费(B4/B7)
6c6g 后端 Tier0 计划 U5+U6(docs/plans/2026-06-17-001-...)。
- U5 giveupNode 真落盘:gameRuntimeRoot 句柄 + attempts/verdict/escalationEvents 整包写盘 giveup-dump.json + K_GIVEUP_DUMP_PATH 回填真路径;
best-effort 落盘失败仍正确 failed 终态;多级升档 stage3+ follow-up
- U6 modify 不被卡部分:
· base 源 dispatcher 据 baseVersionId(V19 持久化)反查 SourceProjectApi.fetchByVersionId→K_SOURCE_PROJECT(零新增列/不搬大 blob)
· regenerate-module 缺 target fail-loud(防静默全量重生成)+ 真消费 base 源(buildRegenerateMessages 注 base 源 JSON+目标 behavior 聚焦,system 不变;create/repair 普通路零变)
· deterministic guard-pending-E2 一字未动;严格 per-behavior splice-back 依赖结构化源=follow-up(诚实标注)
- -api:SourceProjectApi.fetchByVersionId + DTO
- 测试:aigc 46+studio 44=90 绿(+17 新);codex 评审 NO-MERGE→2 P0(缺target/伪收窄)全修后绿
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 23:02:10 +00:00 |
|
zizi
|
069ae73e97
|
feat(aigc/worker): U3 trace 扩展键 + U4 缓存命中落账(B5/B9)
6c6g 后端 Tier0 计划 U3+U4(docs/plans/2026-06-17-001-...)。execution §5.8 trace+cost 落值。
- U3 extractTraceQuietly(Java)+ _extract_trace(worker)additive 抽 modelTier/escalationEvents/giveupDumpPath;
仅真升档态(stage2/escalationEvents 非空)落 modelTier + 形态校验(非空 str/非空 list)→ 字节兼容(无扩展键键集与扩前一致)、Java/Python 两路同口径
- U4 cost.py 缓存命中折¥:两套字段取 max(DeepSeek prompt_cache_hit_tokens / MiniMax prompt_tokens_details.cached_tokens)
+ cache_ratio 折真实 quota;worker usage 捕获(_safe_int 兜脏不抛);pricing 不可达 tokens-only+costFallback 标记;不阻断仅观测
- 诚实边界:SAA Java 路无 cache 字段源→省略不伪造(follow-up);AgentScope 丢 DeepSeek 顶层字段(待真跑对账);worker 生产路完整落账
验证:mini-desktop Java 12+(SaaGraphDispatcherTraceTest)+ Python 73(test_cost 56/wg1_groupb 17)全绿;
codex 评审 NO-MERGE→2 P0(字节兼容/usage 阻断)+2 P1(pricing 口径/两路一致)全修后绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 22:26:27 +00:00 |
|
zizi
|
d57032a6d3
|
feat(studio): U2 源项目落库事务(B8)+ V19/V20 数据完整性
6c6g 后端 Tier0 计划 U2(docs/plans/2026-06-17-001-...)。execution §5.2 源项目工件落库 + status 机器态串联。
- GameSourceProjectDO/Mapper/SourceProjectService(studio,§12-①)+ SourceProjectApi seam(land/markBuilt/markOrphanById)
- 落库挂回调外层 DifyCallbackServiceImpl(非内层 tx)——守 §5.2「源落库与建包非同一大事务」
(land 建包前独立 commit/markBuilt 成功后/markOrphan 失败补偿)
- status 0 草稿→1 已构建(回填 version_id)/2 孤儿(不建包不动 currentVersion);
DifyCallbackReqVO additive sourceProject;dispatcher 从图终态抽 K_SOURCE_PROJECT
- 数据完整性(codex 评审 2 P0+2 P1 全收口):
· P0 终态任务重复回调跳过 land(防版本血缘污染)· P0 去重按 game_id+source_hash + markBuilt 校 gameId(防跨游戏复用)
· P1 markBuilt 与 notify 解耦(notify 失败不停 status=0)· P1 markOrphanById 精确标 + V20 唯一键 uk_game_source_hash(并发兜底)
· post-commit best-effort 包兜底 try(防挂点失败反触写链补偿误置 failed)
- 诚实边界:现图只产最小骨架源(gameDefinition 待生成 agent 真填,跨单元),终态有什么落什么不伪造
验证:mini-desktop 编译绿 + 33 单测全绿(DifyCallback 19/SourceProject 14,含跨游戏/gameId校验/终态重复/notify解耦/markOrphanById);
V19+V20 SQL 结构绿(Flyway-apply 留部署验);codex NO-MERGE→2 P0+2 P1 全修后绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 21:46:38 +00: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
|
04f3bfeeb6
|
fix(aigc): B2 codex 评审整改——救场阶梯连贯/escalate真切档/modify guard/RFC6901
codex NO-MERGE→整改:
- P0-1 validate/build/play 硬失败统一 bumpFailCount(救场阶梯 5/8 对各门生效,非仅 play+recursionLimit 兜底)
- P0-2 nreviewRouter 补 escalate 分支(narrative 同 5+3 阶梯,§5.9)
- P1-5 stage2 强档 deepseek-v4-pro(对齐 models.yaml)+ generate 按 modelTier 二维选档(升档真生效)
- P1-6 applyDeterministicPatch 改 RFC6901 JsonPointer(支持数组下标/追加,越界不损坏源)
- P2-8 classify 失败错因记 trace(非 feedback,免污染 generate 修复上下文)
- P0-3 dispatcher 透传 modifyMode/modifyPatch/baseVersionId/sourceProject + 非法 modifyMode fail-loud(禁静默走 create;job 侧填充待 B6)
- P0-4 modify deterministic guard fail-loud(failureReason=源构建管线待 B7+引擎E2;router fail→END,不静默接忽略 sourceProject 的旧 build)
- P1-7 asset 产侧 merge 真(sp.set assets;消费侧 build→GamePackage 待引擎线 E2/E3)
+5 拓扑测试(共 19 @Test 非门控);create-metric 全链连贯;§1.4 硬约束未碰。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 18:08:08 +00:00 |
|
zizi
|
706d014869
|
feat(aigc): B2 SAA 固定架构图拓扑扩展——+5 节点(classify/asset/modify/escalate/nreview)+ 救场阶梯
execution §6 拓扑落地(opus 实现 + 框架 API 对真 1.1.2.2 jar javap 核验)。11→16 节点,布线唯一源 assemble,无孤儿。
- 5 新节点:classify(真LLM物理优先→archetype/profile三维+§6.4映射表)、asset(六类规格v0+产消打通)、
modify(deterministic改源/regenerate-module路由)、escalate(stage1→stage2+escalationEvents)、nreview(真LLM叙事审查+needsRepair计failCount)
- 布线:render→classify/modify、classify→design、scaffold→asset→build、play→player/nreview/repair/escalate/giveup、nreview→emit/repair/giveup、modify→build/generate、escalate→generate
- recursionLimitFor(maxRepairs,stage2Extra)=(m+s+1)*10+30,默认(5,3)=120;救场 5失败escalate→8失败giveup
- ALL_KEYS 字面量提升为 K_* 常量(单一源);新 SaaArchetypes §6.4 映射表契约;classify/narrative system prompt;saaStage2ExtraRepairs=3 旋钮
- 新 SaaStudioGraphTopologyTest(非门控:哑API build全图证无孤儿+Mermaid 16节点+recursionLimit+路由单测)
- 初始逻辑标 TODO(B4 救场真切stage2模型/giveup真dump/validate-build计failCount)、TODO(B7 modify深层指针/按id定位)
- additive:create-metric全链不破;§1.4硬约束(GamePackage/宿主/回调/九门harness)全未碰
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 17:33:15 +00:00 |
|
zizi
|
0f380a516b
|
feat(contracts): 冻结 SAA state key 全表(ALL_KEYS +14)+ trace 扩展键 schema(§5.4/§5.8)
契约冻结门收尾(§7.0 剩 2 项后端内部契约):
- SaaStudioNodes.ALL_KEYS +14 键(archetype/tickModel/inputModel/progressModel/sourceProject/
assetSpec/modifyMode/modifyPatch/baseVersionId/failCount/modelTier/escalationEvents/
giveupDumpPath/narrativeReviewVerdict),全 ReplaceStrategy;先冻命名空间,classify/asset/modify/
救场 节点 B2 实现写入(additive,存量节点不读零影响)。
- DifyCallbackReqVO.trace(开放 Map)javadoc+@Schema 文档化固定架构扩展键:
modelTier/escalationEvents/cacheHit/giveupDumpPath/cost;落值属 B5 impl,trace_json 字节兼容。
验证:本地结构校验绿(14键无重/无撞/引号成对/数组收尾);纯 additive(字符串数组追加+注释级)。
aigc 编译 + V18 Flyway-apply 的整合 mini-desktop 验证随后跑(清验证债)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 16:54:48 +00:00 |
|
zizi
|
ca72fce600
|
feat(contracts): V18 game_source_project Flyway 迁移(源项目工件表·改源不改产物源侧存储面)
契约冻结增量:execution §5.2 源项目 DB 存储——独立 game_source_project 表(勿塞 game_version)。
两副本(studio 模块 + huijing-server 聚合,字节一致,如 V8 模式)。
字段:game_id/version_id/source_json/source_url/source_hash/schema_version/build_profile/
status(0草稿1已构建2孤儿3已发布)/base_version_id(modify 血缘)+ Yudao 审计列;
3 索引(idx_game/idx_version/idx_source_hash);头注铁律(回滚写 V18.0.1 不改本文件)。
验证:本地结构校验绿(16列/1主键/3索引/括号平衡/InnoDB+utf8mb4/审计列全);镜像已验证的 V8 studio 表约定。
⚠️ Flyway-apply-green 留批量 mini-desktop 部署(与 ALL_KEYS/trace 一并 recompile+migrate)验,本次暂未声称迁移已验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 16:42:50 +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
|
3f712499b6
|
fix(aigc): SAA 图启动期 eager 预热——修早期 boot fast-fail 冷启 race(Round2 §7-2/Round3 doc line 77)
现象(Round2/Round3 真库实证):dispatcher=saa 实例重启后首 2~3 个 dispatch fast-fail
(llm_error,无 saa-dispatch/图构造日志=图未热/ensureGraph race),第 4 个起稳态。
根因:compiledGraph 原懒构造于"首个 dispatch",首个 dispatch 撞冷启窗口。
修(最小+低风险,选 eager 预热而非首N次重试):新增 @PostConstruct warmUpGraphEagerly,
Bean 装配后主动预构造编译图一次,使首个真实 dispatch 不再撞冷启 race。
eager 安全性(已读真代码核实非推断):SaaStudioGraph.build→assemble 只做
addNode/addConditionalEdges+compile(纯内存布线无 I/O);OpenAiApi.build() 是惰性 HTTP
客户端(构造不发请求);唯一副作用是 checkpoint 开启时 MysqlSaver.build() 跑
CREATE TABLE IF NOT EXISTS(幂等 DDL,本就要在首个 dispatch 跑,提前到启动期无新增风险);
serve 端口 4320/CDP 9222 只在 play 节点运行时触达,构造期完全不碰=预热不占端口、
不起浏览器、不引入启动阻塞副作用。
三重非破坏性护栏:① 仅 dispatcher=saa 才预热(http 路零额外开销、零 DDL,保现行保证不破);
② game-runtime 目录缺失则跳过(留首个 dispatch 报投递失败,不在启动期下结论);
③ best-effort——构造失败一律吞+warn,compiledGraph 留 null → 首个 dispatch 走 ensureGraph
原样重试(行为完全回到修前),绝不让预热失败拖垮应用启动。
验证边界:加 SaaDispatcherWiringTest 两轻断言(http 预热 no-op 图保持 null /
saa 缺目录优雅跳过不抛)+ dispatcherSaa 上下文 hasNotFailed(坐实 @PostConstruct 不破启动);
mini-desktop SaaDispatcherWiringTest 4/0/0 全绿。完整 boot 时序(重启后首 dispatch
不再 fast-fail)未在本轮真机复跑,留 staging 复验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 02:47:24 +00:00 |
|
zizi
|
5f6cdd0ce3
|
fix(aigc): F5 修 ReadinessScorer.firstPlay 既存 bug——H_progress 嵌套对象读 .pass(HTTP+SAA 两路 0.5→可达1.0)
根因(真代码+真 verdict.json 实证):真实 verdict.json 的 guards.H_progress 是嵌套对象
{pass,checks,latch,state0,state1}(见 contracts/agent-loop/verdict.schema.json 与
evidence-3bB-final/*-verdict.json;worker _extract_trace 原样透传 guards,SAA 同源),
非裸 bool。scoreFirstPlay 原 asBool(guards.get("H_progress")) → asBool(Map) 落 String
分支恒 false → firstPlay 永卡中性 0.5、永不 1.0(HTTP+SAA 两路同病)。
修:新增 guardPass(Object) 读真值——H_progress 是 Map 取其 .pass 布尔(真实形态);
保留对裸 bool 的向后兼容(老格式/单测夹具)。修后 hasDriver ∧ H_progress.pass=true
→ firstPlay=1.0。源端(SAA/HTTP)产出字节零变更,只改评分器读取口径。
校正受影响单测真值:SaaGraphDispatcherTraceTest.extract_readinessFivePoints
满状态分 83→95(0.50×1.0+0.25×1.0+0.15×1.0+0.10×0.5=0.95);并改写原把"firstPlay
恒 0.5 quirk"当作有意行为的注释/Javadoc(那是修前对 bug 的合理化),坐实现为已修。
DifyCallbackTxTraceTest 用 mock scorer(返 82/50/12)不受影响;其真实算分用例只断
(0,100]+pass>fail 区间,无精确值,仍绿。
验证(mini-desktop 隔离构建树 a09a03e9+patch):SaaGraphDispatcherTraceTest 7/0/0、
DifyCallbackTxTraceTest 6/0/0 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 02:46:59 +00:00 |
|
zizi
|
703e462c96
|
fix(aigc): 闭合 SAA 进程内派发路 trace 接线 split-brain——dispatcher=saa 时落 trace_json/readiness_score
组B(96081a57)给 game_aigc_task 加了 trace_json/readiness_score 可观测列,HTTP worker 路经
service.py:_extract_trace 抽 trace 落库;但 SAA 进程内路(SaaGraphDispatcher.buildCallbackReqVO)
构造回调 reqVO 时从不 setTrace,故 dispatcher=saa(未来主力)时 trace_json 恒 NULL、组B 的
9d/D11/D9 静默失效。本提交在 buildCallbackReqVO 末尾(return 前)新增 extractTraceQuietly,
从图终态 OverAllState 抽一个与 HTTP 路 _extract_trace 字节兼容的 camelCase trace map 并 setTrace。
实现要点:
- 严格 additive(独立成段紧贴 return,删两行即回到修前;null 不 set 走存量旁路)+ best-effort
(整段 try-catch,抽不到/解析失败返 null,绝不打断 SAA 生成)+ 复用组B 同一 feature flag
aigc.trace.enabled,落库由现成 persistTraceQuietly 兜底,零改契约/零改消费侧/零改 HTTP 路。
- 键集严格对齐 HTTP 子集:必填 pass/repairs/wallS/models/attempts/gameId/stage + 可选
gatespec/sevenGateVerdict{pass,guards}/tokens/player;cost 键 v0 整段省略(SAA 只有 token,
token≠¥,挂 cost 语义错→efficiency 中性 0.5 非阻断);similarity 永远省略(D9 未接 SAA)。
- attempts snake→camel(stage_fail→stageFail、usage 仅 {in,out}),不含 per-attempt guards/
sevenGatePass(已核 appendAttempt 三调用点 SAA attempt 从不写,不伪造)。
- models 取 K_TOKENS_BY_MODEL 名键 ∪ attempts[].{role:model} 并集(纯 attempts 缺 player 模型)。
- wallS 唯一来源是 runGraphAndCallback 计时变量 wallMs,透传进 buildCallbackReqVO(签名加参,
唯一调用点同步加参)。safeFailedCallback(图崩溃兜底路)默认不补 setTrace(state 不可达,F4)。
测试(mini-desktop x86 权威构建机,clean test):
- 新增 SaaGraphDispatcherTraceTest 7 用例全绿(纯单元,桩 OverAllState,不起图/不起DB):
键集对齐 HTTP 子集、attempts camelCase 无 guards、抽出 map 喂真实 ReadinessScorer.score
得真值(firstPlay=0.5 评分器既存 quirk + efficiency 中性 0.5 → 总分 83,非过度承诺满分)、
parse-fail/null-state 返 null 不抛、snake→camel red-line、cost 省略 efficiency 中性不报错。
- aigc-server 模块全量 119 测全绿(Failures:0 Errors:0 Skipped:4),零回归,
尤其 DifyCallbackTxTraceTest 6/0/0、DifyCallbackServiceImplTest 13/0/0。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 01:16:07 +00:00 |
|
zizi
|
0e8e36e517
|
feat(aigc): Lane A2 后端三项跟进——source 列结构隔离 + failed 路 trace 补测 + stale 注释对齐
Task1(执行器↔编排器并发结构隔离,原 M-b §16-4 M-c 候选):
- V17.0.0 加 game_aigc_task.source 列(additive NOT NULL DEFAULT 'online',接 V16 不抢号,存量回填 online)
- AigcTaskDO 加 source 字段 + AigcTaskSourceEnum(online/orchestrator/worker)
- submitGenerate/retryTask 创建处落 online;编排器经同入口伪装在线提交、ReqVO 无 source 信号无法在此辨别 → 统一 online,
「编排器经契约声明 orchestrator + 执行器据此隔离」属后续契约决策(留口未接线,见 V17 头注/枚举)
Task2(组B 评审遗留 P2):
- DifyCallbackTxTraceTest 补 testTracePersist_failedPath:failed 回调→markTaskFailed 后 persistTraceQuietly
落失败轨迹 trace_json(updateById×3)、主链置 FAILED 终态、completeWithVersion/产物链一次不调
Task3(stale 注释对齐,只改注释不改逻辑):
- AigcTemplateConstants/getTemplateList/validateTemplateExists 三处「空白名单/clicker+merge」措辞 → 对齐真相
SUPPORTED_TEMPLATE_IDS=["generic"](getTemplateList 返回空选单列表与白名单是两个口径,注明区分)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 19:10:00 +00:00 |
|
zizi
|
96081a574c
|
feat(aigc): W-G1 组B 落库组——9d trace 账本 + D11 就绪评分 + D9 反同质化(全非阻断)
把 worker 已产出、当前在边界被丢弃的富生成轨迹(9d)接过来落库,补"放了能管/追溯/不雷同"
三件 v0 能力,全部 best-effort 非阻断(口号"放了能管,非放了能拦")。三件全关=现行字节零变。
契约先行:
- contracts/api-schemas/aigc.yaml DifyCallbackReqVO 加 trace(object,nullable) additive 字段;
顺带补 engineBundle 漂移对齐(Java 已加 yaml 漏)——守契约先行收口。
9d trace 账本(公共底座):
- Flyway V16.0.0:game_aigc_task 加 trace_json(JSON NULL)+readiness_score(SMALLINT NULL),
additive 可空 AFTER failure_reason(接 V15 组A level,勿撞号);AigcTaskDO 加两映射字段。
- worker service.py:_extract_trace 从 run_studio result 抽 9d 子集(必填子集7项+可选段,camelCase),
build_callback_payload 加 result 参可携 trace,handle_job 把 result 提到函数作用域传入(成败路都抽)。
- 后端 DifyCallbackTxService.persistTraceQuietly:succeeded 步骤⑦后 + failed markTaskFailed 后
best-effort 落 trace_json;全程 try-catch 吞异常,绝不回滚三表写链/绝不阻断 PUBLISHED。
D11 就绪评分:
- 新建 ReadinessScorer:读 trace 算 0-100(playability 0.50/firstPlay 0.25/stability 0.15/efficiency 0.10,
权重占位待校准;缺字段取中性 0.5,纯函数无副作用);算分独立 try-catch,失败仅 readiness 降级 NULL、
不拖累 trace 落库(§7)。AigcTaskRespVO 加 readinessScore(BeanUtils 平铺自动映射)→ /task/page 零改透出。
D9 反同质化:
- 新建 worker agent_loop/dedup.py:移植 agent-loop-v1 run_batch.py:96 _norm_text(归一≈复制)
+ ledger.py:50 mint_design_id 思路(compute_sig 精确撞重键);重接 _dedup_gate 逻辑——解绑实例状态
改 FS jsonl 登记表、engine 路取字段(title=brief 派生/theme=generic 占位)、落库改塞 trace.similarity。
- studio.py result 注入 similarity(AIGC_DEDUP_ENABLED 开关门控);撞重只 log.warn+dupHit=true,
照常回调入 feed(v0 只观测避免误杀,九门已是硬地板)。
回滚:三件各一开关(aigc.trace.enabled 默认 false/D11 随 trace/AIGC_DEDUP_ENABLED),全关=逐字一致;
列 additive 可空,真回滚写 V17 drop(不改 V16,遵 V2.0.0 头注铁律)。不触公平性铁律(只读 gatespec)。
验证(mini-desktop /root/build-lane-a 隔离目录):
- Java:aigc-server 全模块 clean test 111/111 通过(0 fail/0 err/4 skip,BUILD SUCCESS);
含新 DifyCallbackTxTraceTest 5/5(trace 落库/失败不阻断/D11 算分 pass-vs-fail/算分失败不阻断/RespVO 可见)
+ 既有 DifyCallbackServiceImplTest 13/13 零回归(坐实 traceEnabled=false 现行行为字节一致)。
- worker:wg1_groupb_test.py 17/17(9d trace 必填子集完整率 5/5=100% + D9 撞重/归一/不撞/坏行容错);
真 venv 验 dedup/service/studio import 链健康 + result=None additive 兼容。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 18:04:02 +00:00 |
|
zizi
|
0b1b37ea3c
|
feat(aigc): W-G1 开闸验收门·组A 落地——D12 控制平面 v0 + GP9 合规先行段
把"一句话生成"对真实创作者放开前焊死 2 道硬阻塞闸:单用户压不垮全局串行 worker、违规 prompt 进不了生成与 feed。
契约先行(V15 DDL/错误码/配置类先于业务),feature-flag 默认关=现行行为逐字不变。
D12 控制平面 v0:
- 抽私有 enqueueWithControlPlane,submitGenerate 与 retryTask 共用(决策D:retry 也走全门,违规/超配额无法靠 retry 绕过)。
门序(最便宜→最贵):① 降级门(infra ConfigApi 读 aigc.generate.paused,fail-open on switch)
→ ② 配额+并发门(per-creator×level 当日非取消计数 + 在飞并发,判定一律 >=)
→ ③ 背压门(全局在飞 >= queue-depth-limit)→ ④ GP9 safety(放最后)→ ⑤ insert + 额度记账骨架(仅 log,非真扣费)。
- V15.0.0 game_aigc_task 加 level 列(TINYINT NOT NULL DEFAULT 1)+ AigcTaskDO.level;v0 统一落 L1(会员档未建,避孤儿)。
- 新建 AigcControlPlaneProperties(前缀 aigc.control-plane):enabled/queue-depth-limit/safety{timeout-ms,max-retry,fail-closed,
new-api base/key/model}/quota{L1/L2/L3 daily+concurrency}(数值占位待创始人)。
- ErrorCodeConstants 加 001 子段 5 码(配额/背压/降级 + UNSAFE_PROMPT/LLM_SAFETY_ERROR);均业务码,不产生 HTTP 429/503。
- AigcTaskMapper 加 3 计数查询(selectCount,零原生 SQL/零 DDL 索引);aigc-server pom 补 huijing-module-infra-api 依赖。
GP9 合规先行段:
- 新建服务层独立 SafetyCheckClient(不复用执行器 ExecutorLlmClient——被 aigc.executor.enabled 门控、服务层注入不到):
new-api 连接走 control-plane 配置(与执行器开关解耦,解 new-api 服务层可达性),装载 01-safety prompt,短超时 8s + 至多 1 重试。
- 接门④:safe=false 抛 AIGC_UNSAFE_PROMPT 同步拒绝不入队;超时/失败 fail-closed 抛中性 AIGC_LLM_SAFETY_ERROR(复用 FailureReasonEnum
语义不新增枚举)。pom copy-glob 加 01-safety/*.md(已验进 classpath)。
- 补 10 条违规负例集 contracts/prompts/eval/safety.prompt-check/(十类红线各 1 条,全 expectedSafe:false)+ README。
装配:AigcControlPlaneConfiguration @ConditionalOnProperty(aigc.control-plane.enabled) 注册 Bean;AigcTaskServiceImpl
经 ObjectProvider 软注入(enabled=false/Bean 缺席 → 全门+GP9 旁路 = 现行行为)。
零越界:门③ promptHash 缓存未做(promptHash 仍照算照落 provenance,v0 不读它做缓存);真实计费扣退/组B 落库/审核台/会员档数值均未触碰。
验证(mini-desktop):test-compile BUILD SUCCESS;AigcControlPlaneTest 16/16 + SafetyCheckClientTest 7/7 +
AigcTaskServiceImplTest 9/9(零回归)+ 全 aigc-server 99 run/0 fail;V15 SQL 真 MySQL 8.4.8 语法校验通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 20:10:44 +08: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
|
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 |
|
zizi
|
a2cbabe647
|
fix(gen): tap 类 design-agent 自产 driver——规则③家族二分补 tap-targets,闭 driver:none 临门一脚(Python+SAA 逐字同改)
DESIGN_SYSTEM 规则③旧「纯点击类用 driver:none」一刀切 = moat「一句话现生成」对 tap 族不可靠真因(盲打打不中离散目标→H_progress 卡)。改家族二分:
- 离散点击目标类(井字棋/打地鼠/扫雷)→ 必产 tap-targets + 导出 targets[{x,y,idx,occupied}];规避/推理族 +safeOnly +导出 safe(仅 _forensicsView 测试可见不渲染)+断言 result==win;安全放置族断言 progress↑
- 技巧挡板类→ 仍 paddle-intercept(ball.x,绝不 ball.y);其余→ none
roles.py(Python worker)与 SaaPrompts.java(SAA backend)规则段逐字一致(1076 chars,公平性铁律),SAA test-compile 绿。
验证(Python 派发面,play_spec={} 逼自产,stage1=deepseek-v4-flash):
- tictactoe(放置族)整链 9/9 全绿一次过=design 自产 tap-targets→factory 自产 targets→九门含 H_progress+latch 达终态(铁证)
- saolei(避负族)driver 自产正确 3/4,但九门未翻绿=便宜模型扫雷 factory 质量(Math.random违禁/win不可达/A_boot崩),九门正确拦截,与本修正交(O1 factory 级,§9/scale-20 跟踪)
- breakout 回归未误伤=恒 paddle-intercept,H_progress 绿;成本闸内(¥0.014~0.052/款);仅改 prompt 未加 extractGatespec 兜底
源:2026-06-15-WG1-tap-targets-driver-自产缺口-L1brief.md / driver-coverage §6
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 17:08:12 +08: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
|
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
|
314b421ac1
|
feat(saa): form① 进程内派发器 + step5 MysqlSaver checkpoint + observation 埋点收口 (HJ-AGI-002)
把已跑通的 Python agentic 生成系统 SAA 迁移从 spike 推进到生产收口:form① 进程内派发器 + 迁移 step5(checkpoint) + 可观测埋点,并修 split-brain、调和依赖。
- form①: GenerationDispatcher 契约 + SaaGraphDispatcher 进程内直调 difyCallbackService.handleCallback(消灭 HTTP+HMAC);默认 dispatcher=http 逐字非破坏,saa 仅 opt-in,SAA 图懒构造在席零开销
- test→main: SaaGenNodes/SaaPrompts/SaaStudioNodes 提升;抽 SaaStudioGraph 为唯一布线源,SaaStudioGraphTest 改调 build()(修 split-brain,杜绝两处布线漂移)
- step5: MysqlSaver checkpoint(懒建/一图一 saver/注 yudao Druid/releaseThread(false)/CREATE_IF_NOT_EXISTS),SaaGraphDispatcher threadId 缝接实;Flyway 零撞名(GRAPH_CHECKPOINT/GRAPH_THREAD 大写引擎私有,测试隔离 saa_spike schema,生产 ruoyi-vue-pro 零污染)
- observation: GraphObservationLifecycleListener 节点级 trace/耗时/失败埋点(经 starter-graph-observation 自动配置)
- 依赖调和: 删 agent-framework/builtin-nodes(零引用·后者硬钉 1.1.2.2 脱 BOM 版本钉债,拖 tika 全家桶),留 graph-core/starter-graph-observation/spring-ai-starter-model-openai;MysqlSaver/observation 机芯均在 graph-core(动 pom 前已核归属)
- 验证: 全 SAA 套件 16 run/0 fail/3 skip(harness-gated 正确跳过);test-compile 门绿;依赖树 Boot 全 3.5.14/redisson 4.4.0/零 3.22 泄漏;checkpoint 真恢复 6/6 确定性(查库 GRAPH_CHECKPOINT 实有 node_id=n1/next=n2 行 + 跨实例 N1_RUNS==1 真接续非重放)
- 框架坑记档: SAA MysqlSaver.saved_at 秒级 TIMESTAMP、load SQL ORDER BY saved_at DESC 无 tiebreaker → 同秒多 checkpoint 时默认 resume() 非确定;修法=getStateHistory 按内容选中断点、显式 checkPointId 续跑绕开排序
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 10:19:48 +08:00 |
|
zizi
|
2b59f53f44
|
feat(saa): Python agentic 生成系统迁移到 SAA(Spring AI Alibaba)裸图 spike (HJ-AGI-002)
全图 design->generate->validate->[repair环]->scaffold->build->play(九门)->player->emit;build/play 复用既有 harness 子进程。
SAA 完整框架集接入 aigc-server(graph-core/agent-framework/builtin-nodes/observation/openai,3 BOM;Boot3.5.14/Redisson4.4.0 保住)。
双评审(Opus+Codex)9 项对比前必修:LLM超时重试/ProcessBuilder超时修复/采样面对齐/playerFeedback清串味/gatespec强解析/problems归一/recursionLimit兜底/cost/端口参数化。
首轮对比 breakout/whack/flappy:SAA 通过率 2/3 >= Python 1/3。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 07:55:27 +08: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
|
00a1275637
|
chore(cleanup): 清理 yudao 存量死代码/垃圾(139 删+1 改,净删 ~5.6 万行)
- yudao 内置 demo 示例代码:infra Demo01/02/03 学生CRUD · pay PayDemo · bpm flowable 监听器示例 · system DemoJob(零外部引用,无菜单/xml/test 连带)
- yudao-ui/ 5 个占位 README stub(实际前端在顶层 game-admin/game-studio)
- 21 个 .http IDE scratch 文件(infra/pay/system/bpm)
- sql/ 非 MySQL 方言 DDL:db2/dm/kingbase/oracle/opengauss/postgresql/sqlserver(平台只用 MySQL;含 dm/flowable-patch 手工补丁,未入 maven 构建)
- infra ErrorCodeConstants 移除 10 个 DEMO 孤儿错误码常量(引用方已删)
- game-admin src/{api,views}/infra/demo codegen 示例视图
未动:yudao-module-bpm/pay 模块裁剪 + scripts/ 一次性脚本(待产品决策);改名搁置。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 10:57:46 +00:00 |
|
zizi
|
23decfefaf
|
feat(passport): staging 限定免真实短信验证登录——内测解锁(profile 门控·生产不受影响)
创始人:「allow login and registration without SMS verification for now」。staging 未接真实
短信网关,随机码外人无从得知→创始人人测/e2e UI 走查均无法登录。
实现(信任边界=后端服务层 PassportServiceImpl,profile/配置级门控):
- 新增 @Value sms-mock-enabled(缺省 false)+ sms-mock-code(缺省 8888)
- sendSmsCode:开关开→mock 受理成功(不依赖真实网关)
- smsLogin:开关开 ∧ 提交码==固定码 才跳过 system_sms_code 校验,否则真实校验(双条件,非无脑放行)
- 仅 application-staging.yaml 置 true;生产/dev/local 不配→@Value 缺省 false→真实短信校验绝不削弱
- log 经 DesensitizedUtil 脱敏手机号;安全注记三处冗余(Javadoc/行内+log.warn/yaml)
⚠ 公网上线前必须关闭(=实名/短信网关日历闸门):开启=任何人凭 8888 登录任意号,绝不可进生产。
编译 BUILD SUCCESS + 20/20 单测(含 5 新增,2 个"开关关→生产不受影响"反证)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 10:40:06 +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
|
238ec2dbe8
|
test(aigc-3b-B): 视觉终局达成——真游戏真玩入 feed(亲眼验);一句话现生成腿缺口=tap类driver:none→L1
3b-B 重跑视觉终局(mini-desktop·证据 wg1/gen-worker/evidence-3bB-final/):
✅ 视觉终局达成(亲眼复核截图):feed 里一款真渲+真玩有进展的井字棋(gameId=9306/versionId=93112)——
空盘「轮到X」→ 落子填盘 X·O → 「X 胜!」+ 重新开始(latch 终态);feed 真玩门 10/11 过
(no_demo_fallback/engine_rendered/lively_interactive 全 true,唯一 false=play_start 遥测非阻断)。
经真 HMAC 回调写链落库(验签通过 engineBundleLen=210891→建版本→组包 checksum 自洽→翻 feed)。
走兜底路(诚实标注):主路一句话现生成两次均失败,故取已验证过九门样板 tictactoe(便宜模型 flash 真生成、
verdict A-I 全 pass)的 engineBundle 经派发面真回调路落 feed,DB bundle 与样板 sha256 字节级一致。
仍是便宜模型真生成的过门游戏,只是非本次现生成。
★ 主路两次 fresh 失败真因(非模型壁垒,铁证):design agent 在 dispatch 面 run_studio(play_spec={}) 下
均给 driver:{type:none}→harness 盲打打不中目标→moves/score 恒 0→H_progress 挂+latch 不触发,repairs=5
耗尽。游戏本体全对(gen9306/9307 verdict 8/9 门过,targetX/Y/radius·board·moves 导出正确,G_input/
I_control/F_wiring 均过)。样板过门靠 lane brief 手供 play_spec.driver=tap-targets。
→ 蒸馏入 cheap-model §7:DESIGN_SYSTEM 须对离散点击类强制产 tap-targets driver(纯 L1 生成域,
moat『一句话现生成』腿的真·临门一脚)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 00:48:50 +00:00 |
|
zizi
|
c99014c243
|
test(aigc-3b-B): 派发面 e2e 真证安全面+全自动管线闭合(HMAC双向),P5 生成质量转 L1
3b-B e2e(mini-desktop 真跑·证据 wg1/gen-worker/evidence-3bB/):
✅ P0-P4 安全面+全自动管线=真证闭合(铁证 backend-callback-hmac.log + p4*.txt):
- HMAC 双向证:缺签名头→HTTP 401 / 错签(deadbeef≠482147b5)→HTTP 401 / 正签→过门(走到下游"任务不存在"非401)
=关死 /dify/callback-internal 裸 @PermitAll 缺口
- 全自动派发链真通:执行器认领 taskId→dispatchGeneric 投 §6.1 job→worker 真生成(真烧模型)→
HMAC 签名回调→验签通过→handleCallback 落库(gen-9303/9304/9305 三轮齐全)
❌ P5 一句话真生成=未达终局:三款全 nine_gate_failed。但截图(gen-9303-after-play.png)证生成
真出 on-theme 可渲可动的「点击小怪物」游戏(Score/3s 倒计时/多彩怪物 monsters/targetScore=12),
仅点击→计分坏(Score 仍 0)→九门确定性地板正确拦截「看着像但玩不了」=质量门正确履职、拒发不可玩。
判:L0 交付(管线+安全+质量门)已完成且证;缺=便宜模型把「点击命中→计分」写对=L1 生成域
(prompt 点击坑+模型档+player/calibration,run_studio 自修 max_repairs 未救回)→转 L1 v3 迭代。
附带:serve-and-play.sh 跨平台 Chrome 探测(CHROME_BIN 覆盖>Linux /usr/bin>macOS>PATH 兜底,
Linux 在前因 mini-desktop x86 是权威 e2e 机);p3bB_*.sql 发布四态/翻 feed 桩。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-14 16:20:28 +00:00 |
|
zizi
|
d59093f84c
|
feat(aigc-3b-B): 派发面真 worker 服务壳 + HMAC 服务间签名(关 @PermitAll 裸缺口)
P3 W-G1 派发面 3b-B:把 3b-A 的 stub worker 升级为真生成 worker 服务壳,
并补 HMAC-SHA256 服务间签名关掉 /dify/callback-internal 的裸 @PermitAll 安全缺口。
后端安全面(评审验证):
- CallbackSignatureVerifier(新):HMAC-SHA256 对回调原始字节验签,MessageDigest.isEqual
常数时间比对(抗时序),JDK 原生零新依赖,空密钥=回退 3b-A 仅内网兜底(灰度/回滚兼容)
- AigcExecutorProperties:加 callbackSecret 字段(来源 aigc.executor.callback-secret)
- AigcExecutorConfiguration:注册 Verifier @Bean(随 executor.enabled 装配)
- AdminAigcTaskController.difyCallbackInternal:接 @RequestBody String rawBody 先 HMAC 验签
(错签真 HTTP 401),再用同字节反序列化为 VO,补 traceId/status 非空(绕 @Valid 手动校验);
系统身份 id=0 注入 + finally clearContext 保留(部署窗口#3 同根因)
- application-staging.yaml:加 callback-secret 占位符 + worker-url 指真 worker :9401
worker 服务壳(语法+契约对账验证):
- wg1/gen-worker/worker/service.py(新):http.server 服务壳包 L2 run_studio
(design 展开一句话→自产 gatespec→九门真玩),run.py/agent_loop 逐行不改;
POST /generate 收 §6.1 job 立即回 202→后台串行真生成→读 bundle.iife.js→
HMAC 签名(逐字节对齐 Java 验签:json.dumps ensure_ascii=False 一次算定既签既发)→
POST 回调入参驱动落包入 feed
契约对账:执行器 dispatchGeneric job 含 brief/gameId/traceId/templateId ↔ service.py 读取一致;
HMAC 两侧密钥(CALLBACK_SECRET/AIGC_CALLBACK_SECRET)须逐字节一致。
e2e(worker 起+HMAC双向证+一句话真生成入feed真玩)待 mini-desktop 跑。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-14 15:03:53 +00:00 |
|
zizi
|
ce9085df6b
|
feat(runner-v2): P3 3a+3b-A 派发面 plumbing——便宜模型生成游戏经后端 dispatch 自动入 feed 真玩(零回归验)
3a canary:pong 真 bundle→buildGamePackage→发布→feed 引擎真渲真玩(gameId 9301,brick-2 真值通路 mvn 13/13 验)。3b-A 派发面:执行器对 generic dispatch 外置 worker→worker 回调→buildGamePackage→feed,stub worker e2e 实证(任务129→版本93111→gameId 9302 引擎真渲 CDP 11/11)。
改动:① 点亮 AigcTemplateConstants(List.of(generic))+PromptResourceLoader ② 派发面 AigcGenerateExecutor(dispatchGeneric 分支:仅 dispatchTemplateId=generic 走、其余进程内 LLM 旧路逐行不变=零回归)+WorkerDispatchClient+AigcExecutorProperties/Configuration ③ 内网回调 AdminAigcTaskController @PermitAll /dify/callback-internal(注入系统身份解 updater-null=部署窗口#3 同根因复发,镜像 executeWithSystemIdentity)④ stub worker scripts/wg1_stub_worker.py + 灌库/发布桩 p3_*/p3b_* + config worker-url ⑤ 单测 +3 派发面用例(dispatch/失败/零回归 clicker 不 dispatch)⑥ 蒸馏 ai-generation-pipeline.md §⓪′ 派发面范式+2 红线。
零回归硬约束:AigcGenerateExecutorTest 20/0/0、AigcTaskServiceImplTest 9/0/0,clicker 仍进程内(dispatchSender 零交互)。主笔亲核 gating diff(:342-344 仅 generic)+肉眼复核 feed 真玩截图。🔴 安全红线(留 3b-B):/dify/callback-internal 跳 RBAC 仅恃内网兜底,真 worker/外部接入前必补 HMAC/mTLS 服务间签名。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-14 14:19:25 +00:00 |
|
zizi
|
e6dbc3bb5a
|
feat(runner-v2): P3 L0 brick-2 后端 engineBundle 真值通路+gameConfig 占位+prompt registry 脚手架(additive·未点亮)
① DifyCallbackReqVO 加 engineBundle additive 字段(@Data 自动访问器)② DifyCallbackTxService.resolveEngineBundleText 真值切换(:398 return reqVO.getEngineBundle())③ validateSucceededPayload gameConfig 占位=逻辑零改(既有非空校验已满足 meta 占位{templateId,title,theme,engineDriven},仅补注释)④ prompt registry:generic-coder.md stub + generic.schema.json(合规落 contracts/templates)+ registry.yaml 条目 + eval 目录。未点亮 generic 路(SUPPORTED_TEMPLATE_IDS 仍 List.of()、TEMPLATE_RESOURCES 无 generic)→ 现状生成路径零变。本地验:yaml/json parse + Lombok 访问器确认;**full mvn 编译验留 L0 整合步(派发面)一起做**。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-14 12:47:14 +00:00 |
|
zizi
|
5d3f7a87f0
|
feat(runner-v2): P2 通用宿主泛化落地——引擎游戏真渲入 feed 真玩(mini-desktop 真机门验)
P2 = 把 P1 装载契约从「装载王蓝莓一款」泛化为「装载任意 GamePackage」,经发布主链入 feed、
真人浏览器真玩。4 决策落实(O2(b)纳入 Phase C / DB-manifest 内嵌 / 灌库桩 / __GameBundle)。
三轨实现
- 后端:GamePackage schema 加 engineBundle additive 可选字段;buildGamePackage 加 engineBundle put
(P3 生成路用,P2 恒 null→put 跳过→字节零变,单测 packageBytesReproducible 证);灌库桩
p2_seed_engine_bundle.mjs + 四态脚手架 p2_scaffold_4state.sql(W-CLEAN 后重建已发布游戏)
- 运行时:P1 bootRef 泛化为 bootGameHost(opts)(引擎骨架照搬+参数化工厂来源/插件/视口),
bootRef 退化薄包装;固化 build:ref-bundle 产 dist/ref-bundle.iife.js(--global-name=__GameBundle)
- studio:inject.ts 引擎包分支(pkg.engineBundle? → 内联 script 暴露 window.__GameBundle →
bootGameHost 挂引擎真渲;否则旧 startRuntime 路保兼容);掏空壳改引擎分支(Phase C);CSP 不放外域
对抗代码复审逮 2 mustFix(主 agent 亲核亲修 + 6c6g 复验)
- 灌库桩读错产物(ref-bundle.js harness vs .iife.js)→ mini-desktop 灌库返工死循环
- 引擎分支漏发 game_start → 会话/play_count 静默吞、门②检不出 → 补发(DB session 行实证已修复)
+2 shouldFix(兜底可观测信号 / 灌库 SQL @pj 防撞 max_allowed_packet)
+ 真机门逮 2 环境缺陷已修(seed charset=utf8mb4 防双编码断 checksum 链 / 四态脚手架补 W-CLEAN 空库)
mini-desktop 真机门 6 门(逐门实数,主 agent 肉眼复核证据)
①build:ref-bundle 265374B/__GameBundle 真入包 ②Java 编译过+字节复现单测 ③studio staging 重建消 mock
④灌库 status=1∧checksum 64hex∧engineBundle 键齐∧manifest sha256 一致 ⑤真人 feed 点卡→引擎真渲
暖阳小卖部(warm=1246073px)非「重构中」+game_loaded+game_start+防 demo 三锚+console 零错+DB session 行
⑥回滚:无 engineBundle→demo 壳/错误态,向后兼容未破。证据 game-studio/evidence/p2-feed/
诚实 gap:game_end(到结算)未在自动化窗口内达成=ref gameover 需分钟级真玩+srcdoc 坐标盲点的取证局限,
非引擎/渲染能力缺陷(机制已通,留人工真玩到打烊补全)。受控面 6 项+game-host.d.ts 零改。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-13 20:36:32 +00:00 |
|
zizi
|
f63c56bec8
|
docs(cleanup): 全文档清毒收编——长尾18改+1新建(知识3/技能6/DocB注记/契约deprecated/DifyCallback诚实注记×4/双.agent/执行spec横幅)+主会话补刀tech-decisions两处漏网(回填横幅与生成主线行的'模板驱动'死口径);活文档面残毒终扫清零
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-06-12 17:40:16 +00:00 |
|
zizi
|
09d8678deb
|
fix(aigc): ExecutorLlmClient 显式 max_tokens=4096——对拍 llm_client.py 双侧固化,杜绝推理型通道吃光网关缺省额度致空content重试(C6.1实测22次空重试教训);雷一PromptResourceLoaderTest经核验本就版本无关设计,无需改
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-06-12 12:49:12 +00:00 |
|
zizi
|
7bf2cd1d3b
|
refactor(w-clean): 旧玩法模板清除(创始人令2026-06-12)——模板哲学落地第一刀
- game-studio runtime/index.ts 843→113行:clicker/merge/idle/tycoon 四模板游戏逻辑全删,统一「模板体系重构中」错误态(画布明示+game_error事件,不抛裸异常);运行时壳/生命周期/SDK/destroy 契约保留
- 后端:AigcTemplateConstants.SUPPORTED_TEMPLATE_IDS=List.of()+getTemplateList 返回空(提交入口/执行器双层拒绝,直插任务不烧LLM);两测试诚实适配(机制覆盖保留+清空后拒生成断言),aigc 模块 56 测全绿
- staging DB:15 表 1022 行已先归档(mini-desktop:/root/backups/w-clean-20260612/,304,606字节,可整表回滚)后物理删除;遥测/zone/player/trade/community/biz 全保留
- 验证:前端 build 绿/health 200/feed 空列表优雅(既有空态分支)/smoke 9/12(3 FAIL=feed空的预期差异,留档不掩绿)
- 未动:contracts/templates schema 与 prompt registry(死内容,随 W-T1b spec v2 的 9a 能力插件清单一并清退)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-06-12 09:24:27 +00:00 |
|
zizi
|
60e736ac1a
|
docs(harness): 收口协议单清单化+四处漂移纠偏+配方出仓蒸馏——2026-06-11 harness 体检落地
体检根因:收口规则散落 4 处(总账铁律/作战清单回填铁律/README 维护规则/协议 §6)靠记忆执行
→ 漂移已实发(总账表头停 06-09 两日、作战清单轮次未滚动、.agent 残留 Day-0 横幅、AGENTS §3 仍写"三仓未入本仓")。
- 新增 .agents/skills/wave-close-checklist.md:收口七步唯一可执行清单(总账+表头/作战清单+归档/回填/.agent 仅结构变化/蒸馏/索引/编排资产入库+30秒自检);总账铁律、协议 §6、编排文档全部改为指向它
- 四处漂移一次纠偏:总账表头 06-11+对账 f403d11;game-cloud/.agent(Day-0→11/13 模块实态、技术栈对齐 C2 裁定、Wave4 销账);game-studio/.agent(mock 态→接 staging 实态);AGENTS.md §3 monorepo 实态+目录树补 contracts/game-*/deploy/mvp+memorys 标记停增
- 作战清单瘦身:3843 字符巨型 bullet 等完成史整体迁 MVP作战清单-完成史归档.md(原文快照保真),清单 68→33 行只留队列;新一轮完成线标注待创始人拍板重锁
- 配方出仓蒸馏(原仅存会话私有记忆):skills/staging-ops.md(机器分工/git 同步/重部署字节码实证/前端构建门/冒烟)+ skills/ui-walkthrough-cdp.md(CDP 七坑/studio/admin 走查/信道探针);README+AGENTS §5 索引同步(§5 顺带补回漏登的 add-game-template/prompt-governance)
- 编排器 .agent 户口:QA 工具箱定位/组件清单/纪律(新工具不再长进 runs/)/Doc B T-id 编目与 tools/ 迁移留待办
- 协议修正:§5 前端验证门 pnpm test→npm run build(vue-tsc 假门禁红线入文);§1 历史检索改指 agent-specs 收口报告;mvp-execution-orchestration 加波次制现状注记(Day0-15/站会为目标态)
- .gitignore 加 __pycache__/.pytest_cache(注释说明与 build/ 老雷的区别)
遗留:nightly cron 哨兵(动 mini-desktop,待拍板)/ Doc B 未编目组件销账 / tools/ 迁移评估。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-06-11 13:26:04 +00:00 |
|
zizi
|
1921f85712
|
fix(feed): 分享OG空——getShareMeta 回填 ogTitle/ogImage/ogDescription(原为桩)
Lane A studio走查triage逮:getShareMeta 的 OG 三字段是显式桩(line280 TODO占位恒空),social 抓取无标题/封面=分享落地页破(护城河virality断)。修=照 feed stream 同源经 projectApi.getFeedMeta 回填 ogTitle(project标题,已发布必有真值)/ogImage(封面url,暂无封面源则留空)/ogDescription(按标题派生引流文案);游戏元信息缺失(data=null)留空不阻断分享。同步更新 FeedServiceImplTest 2 个 share 测试(加 getFeedMeta mock+OG回填断言)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-11 12:59:20 +00:00 |
|