lili
|
4bc36ec6dd
|
feat(game-cloud): RocketMQ 异步 gen 队列(生产者+有界消费≤15+CAS 幂等)(切片一 阶段〇 C3)
入队发 AIGC_GEN_TOPIC 信号替 @Scheduled 轮询触发;消费者 consumeThreadMax=15(在跑并发权威)+ 既有
claimQueuedTask CAS 认领幂等;派发失败落 failed 不留悬空 running;@Scheduled 降级兜底(捞 stale queued +
超时 running)。发 MQ best-effort 不回滚入队。单测锁幂等/best-effort;端到端随后端窗口。
name-server 各 profile(dev/local/staging)+base 指 mini-infra 100.64.0.8:9876;rocketmq-spring-boot-starter
在 starter-mq/websocket 均 optional=true 不传递,故 aigc-server 直依赖(版本走依赖管理)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-01 17:40:40 -07:00 |
|
lili
|
6d6bb52d9d
|
feat(game-cloud): Sentinel 入口 QPS 突发保护(FLOW_GRADE_QPS·规则热源 Nacos)(切片一 阶段〇 C2)
入队入口套 @SentinelResource(aigc:gen:admission)做入口速率闸,与 DB 三门(per-creator 配额)分层;
越限 blockHandler 优雅拒非 500。并发≤15 权威=C3 consumeThreadMax(非本 Task)。规则改 Nacos dataId 热生效。
单测锁降级语义;真限流集成验证随后端窗口。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-01 09:59:31 -07:00 |
|
lili
|
55e833b470
|
feat(game-cloud): 重启用 Nacos 配置中心+服务发现指向 mini-infra(切片一 阶段〇 C1)
application.yaml nacos discovery/config enabled false→true + server-addr 100.64.0.8:8848 + 鉴权。
依赖零新增(starter 已声明)。本地编译绿;真注册验证随后端窗口。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-01 09:32:42 -07:00 |
|
lili
|
5265f538b8
|
feat(contracts,aigc): prompt registry 一致性 CI 门 + Java TTL 运行时热取(切片一 C2)
check_registry.py 校验 registry.yaml 每条 id.version 与 .md frontmatter 对齐(漂移 exit 1,17 条全绿);PromptResourceLoader 加 @Scheduled 60s TTL 热取 + classpath 永久兜底 + volatile 原子换 Map(mvn compile 过 + 9/9 测试)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:06 -07:00 |
|
lili
|
938219d7a5
|
feat(studio): A11 切片三 M2 判意图入口 Java 侧(studio→aigc→worker)
两段式第一段的后端承接:用户原话进系统、判意图、返建议供前端确认(确认后才调 /modify 执行)。
契约先行:
- studio.yaml 新增 POST /app-api/studio/modify/plan + StudioModifyPlanReqVO/RespVO
studio(应用面):
- AppStudioController.planModify;StudioServiceImpl.planModify =
validateCreator 白名单门(与既有 createDraft/generate/modify 一致)+ 归属校验防越权
+ 委托 aigc classifyModify + 异常/空兜底 unclear
aigc(worker 对接):
- AigcApi.classifyModify + AigcModifyProposalDTO
- WorkerClassifyClient:据 baseVersionId 反查 base 源(同 injectBaseSourceProject seam)
→ NO_PROXY JDK HttpClient POST worker /classify → best-effort 兜底 unclear+needsConfirm
- AigcApiImpl 软注入 ObjectProvider<WorkerClassifyClient>(executor 关闭时缺席→兜底,
绝不因 Bean 缺席启动失败,镜像 WorkerDispatchClient);worker URL 尾段 /generate→/classify
测试:StudioServiceImpl 31/31 + WorkerClassifyClient 10/10 + AigcApiImpl 2/2,
本地 maven 独立复跑 43/43 绿、BUILD SUCCESS,既有 modify/generate/SAA 回归零破坏。
真连 worker 的判意图 e2e 待 M5(mini-desktop)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 01:22:24 -07:00 |
|
lili
|
fc782db08b
|
feat(studio): A11 切片三 M1 前置基座 + M2 worker 判意图
M1 前置基座(便宜档源回传落库链 + base 源注入 + 血缘):
- derive_profile 兑现(便宜档基线 profile{realtime,discrete-choice,metric})解锁 sourceProject 回传
- worker parse_modify 提取 modify 区(mode/baseVersionId/modifyPatch/sourceProject)
- executor 据 baseVersionId 反查注入 base 源到 HTTP job(镜像 SaaGraphDispatcher.resolveBaseSourceProject)
- 回调落源回填 base_version_id 血缘(landSourceQuietly)
M2 worker 判意图(两段式第一段,NL→建议改动+风险):
- cheap_classify 把用户原话 + base 源可改面(assets.js 资产清单/core.js 集中数值/game-logic 玩法)
判成 {category,mode,target,payload,riskLevel,needsConfirm,clarify}
- mode×category 锁定(LLM 给的 mode 不采信)+ 危险回问硬编进 needsConfirm(只低风险确定性改免确认)
- worker /classify 同步端点(不入生成队列、不起 Chrome)
测试:Python test_a11_m1 5/5 + test_a11_m2_classify 9/9 + 回归全绿;
Java 执行器/回调/源服务 + SAA 回归(本地 maven 独立复跑 46 + 子代理 98)全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 01:04:55 -07:00 |
|
lili
|
d00938ccbd
|
feat(cheap-worker): M3b 本机 U1-U3 — 9d trace parity 救活 D11 + D9 vendored + 跨语言反假绿门(切片一 M3b)
便宜档生成切到 cheap-worker 新路后,result_out 只产 trace.cost、缺 9d trace 七项,致后端 D11 ReadinessScorer 三维恒中性、退化成 45/55 双峰近恒定分,D9 反同质失效。
U1 cheap_studio 富化:build_trace_source + _furthest_stage,additive 捕获 verdictFull/driverType/models/stage。U2 result_out._build_trace:七项(repairs=max(0,attempts-1))+ sevenGateVerdict{pass,guards} + gatespec{driver} + cost + similarity,camelCase 镜像 _extract_trace、None 容错。U3 D9 dedup vendored 进 cheap-worker/dedup.py(registry 指自己 results/)、worker_service 接线非阻断。
Java 跨语言切片测加逐维反假绿门(反射调真 ReadinessScorer:三维脱离中性 + 合成分 100 vs 退化 ≤55 拉开 ≥35)。顺带修预存 M3a 红测:worker 异常兜底 failureReason 改传真枚举 llm_error。
验证:cheap-worker 全 16 测绿 + Java 切片 5/5 绿 BUILD SUCCESS。范围仅 cheap-worker/ + 2 fixture + 1 Java 测 + plan,零 live 触碰。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-28 02:17:41 -07:00 |
|
lili
|
a327c9913e
|
fix(m3a): result-out failureReason 对齐后端 FailureReasonEnum 真七值(catch-all=llm_error)
mini-desktop 真 e2e 部署收口抓到的契约 bug:result_out 七值集用了 content_violation/
budget_exceeded/generation_failed 三个不在 FailureReasonEnum 内的值、catch-all 用无效的
generation_failed → worker 失败回调被后端 DifyCallbackTxService.isValidFailureReason 拒
(「failureReason 不在契约#6 七值枚举内」)、回调事务回滚、任务未转终态。
修:七值集对齐 FailureReasonEnum(unsafe_prompt/intent_unclear/no_template_match/
config_invalid/llm_error/timeout/asset_gen_failed);catch-all=llm_error(SaaGraphDispatcher 同口径)。
Java slice test 原只测成功路 validateSucceededPayload、漏测失败路 failureReason 校验故没抓到 →
改为反射调后端真 isValidFailureReason(就是它拒了 generation_failed),本地即可守此 bug 类。
验证:Python result_out 13/13 + Java slice 4/4 本地绿;待 mini-desktop 重部署真 e2e 复验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 22:06:50 -07:00 |
|
lili
|
847089b541
|
feat(m3a): 便宜档 Node 退役机制 U1-U4 本机交付(Python §6.1 worker + 后端路由契约/A2A/幂等)
M3a 退役机制 plan 经 Codex+Opus 双评审(needs-rework)→ 按创始人 A(全局 dispatcher
flag 整体翻转、不做 per-request 灰度)重写 → Opus 复审 minor-fixes → 发现项全数修复。
U1 Python §6.1 HTTP worker(cheap-worker/worker_service.py + result_out.py):
202 投递握手 + 有界串行队列(治串行 worker 忙 409 误判)+ 三字段 result-out
(gameConfig 占位 / engineBundle 承重含 __GameBundle / sourceProject best-effort 2.0)
+ HMAC 回调。27 单测 + 真生成 e2e 过九门 + 真网络回调。
U2 跨语言契约 slice test(CheapWorkerResultOutContractTest):反射调真
validateSucceededPayload 过薄校验 + 真 CallbackSignatureVerifier HMAC。
U3 A2A 状态(additive):AigcTaskStatusEnum.toA2aStatus + app VO/RPC DTO a2aStatus
字段(保留数字 status 不破坏调用方)+ Convert/ApiImpl backfill + 契约 aigc.yaml。
U4 创作请求级幂等(行业标准 idempotency):DO idempotencyKey + Flyway V26
(列+唯一索引,NULL 多值=不去重)+ Mapper selectByIdempotency + submitGenerate dedup。
真验证抓到并修 2 个真 bug:① worker 回调走系统代理被 fake-ip 拦 502 → 禁代理 opener;
② result-out 顶层 costRmb 不在 DifyCallbackReqVO 字段内、后端严格拒未知 → 落 trace.cost。
验证:Python 27 测 + Java 21 测全绿(mvn BUILD SUCCESS)。
剩余 U2 真派发 / U4 真 DB / U5 待 mini-desktop 真部署。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 21:18:28 -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
|
42eafd876a
|
fix(studio): StudioModifyTarget 示例与 studio.yaml 契约镜像对齐(去 gamedef)
Step6 改了 contracts/api-schemas/studio.yaml 的 path 字段示例(去失效的
/gameDefinition/scenes/2),其 Java VO 镜像 StudioModifyTarget L25 @Schema
示例漏同步。补齐:/gameDefinition/scenes/2 → /files/src/game.js,保契约
yaml↔VO 一致(端点/字段结构不动,仅示例措辞)。
验证:mvn -pl studio-server -am compile = BUILD SUCCESS。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 02:31:02 -07:00 |
|
lili
|
94abac1507
|
feat(aigc): 外科挖 SAA graph 内 gamedef 分支(删分支·保节点/边)
按 spec 铁律「删 sourceMode==gamedef 分支、绝不删节点/边」,外科切除
SAA 编排里已废 gamedef(声明式 JSON + new Function)路线;factory/amodel
两路与图节点/边/装配全程保留。
main(4 文件):
- SaaPrompts:删 GAMEDEF_SYSTEM 常量、buildGameDefMessages;historySystem/
historyFirstUser/historyRepairUser 去 boolean gamedef 参数(恒走 iife/factory)。
- SaaGenNodes:删 validateGameDef(唯一调已删 build-from-source.mjs 处)+
validateNode 的 gamedef 分支;连带删孤儿 helper deleteQuiet。
- SaaStudioNodes:删 K_MSG_HISTORY_GAMEDEF(定义+ALL_KEYS);historyKey/
readHistory/appendHistory 退化去 gamedef 参数(恒 factory 键);generateNode
闭包切 gamedef 分支(组 messages/抽产物/历史 append 全退化为 factory);
modifyNode deterministic 点改恒 fail-loud、modifyRouter deterministic 恒 fail
(gamedef 是唯一支持确定性点改的形态,删后该路对 factory/amodel 恒 fail);
清未用 archetype 变量。SaaStudioGraph.assemble 节点/边零改。
- AigcExecutorProperties:saaSourceMode javadoc 删 gamedef 描述(字段保留,
factory/amodel 仍用)+ 删失效 cutover 门。
test(5 文件):
- SaaHistoryFidelityTest:gamedef 形态→factory(历史保真机制与 sourceMode 无关,
答案块改 ```js 工厂使 factory 抽产物自洽);
- SaaHistorySerdeTest:K_MSG_HISTORY_GAMEDEF→FACTORY;
- SaaAnthropicAssembleTest:gamedef 形态→amodel(P0-2 多形态回归);
- SaaStudioGraphTopologyTest:删 modify_deterministic_gamedef_unlocks_validate_route、
改 fail_loud 断言关键词(failureReason 已去 gamedef);
- SaaFullGraphE2eTest:javadoc/注释 gamedef 量测示例→amodel。
DifyCallbackServiceImplTest 的 SOURCE_JSON(含 gameDefinition:{} blob)保留——
源工件 blob 透传测试,不解析内容(spec 铁律:存储层把 source_json 当不透明 blob)。
验证(本机 mvn 真跑·全绿):
- aigc-server Saa*Test + DifyCallback*Test = BUILD SUCCESS, 139 run / 0 fail / 7 skip(skip=系统属性门控的真 LLM/harness e2e)
- studio-server StudioServiceImplTest 27/0 + SourceProjectServiceImplTest 17/0 = BUILD SUCCESS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 02:24:08 -07:00 |
|
lili
|
d0626e1f1c
|
feat(aigc): 删 gamedef skeleton 注入(三仓一物·成套清)
Plan A·Phase 2 的 Template-First gamedef 骨架注入整套删除:
- contracts/agent-loop/skeletons/{breakout,simon,tictactoe}.json(空目录随之消失)
- SaaSkeletons.java(纯 gamedef 专属:forArchetype 返 gamedef JSON 骨架)
- pom.xml(aigc-server)去 agent-loop/skeletons/*.json 的 classpath include
(templates/*.schema.json 等其它 include 保留)
- SaaPrompts.java 删 appendSkeletonIfAny 定义 + 两处调用(buildGameDefMessages
firstAttempt 分支翻转为 !firstAttempt 消空块;historyFirstUser gamedef
分支去骨架追加)
skeleton 是 gamedef 中间表示的"已过门结构参照",随 gamedef 路线废弃一并清。
验证:mvn -pl aigc-server -am compile = BUILD SUCCESS(Java 改动可编译)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 02:04:02 -07:00 |
|
lili
|
f6ebcb6b63
|
test(清扫): 删 gamedef 测试产物(13 个 gd-* + 3 brief)
- game-runtime/games/_wg1-gen/ 下 13 个 gamedef gd-* 测试产物
(gd-angrybirds/breakout/doodle/flappy/invaders/multiball/pong/
runner/saolei/simon/tetris/tictactoe/whack,均含 source.json,
untracked,物理删除);_wg1-gen 本体 + .agent + _goldenpath-probe
完好(192→179 子目录)。
- game-cloud aigc-server 测试资源 3 个 gamedef brief:
saa-e2e-briefs-{gamedef,diverse10,holdout}.txt(git rm)。
仅 SaaFullGraphE2eTest javadoc 示例引用(L71/L79),其读 brief
走 -Dsaa.e2e.briefFile 动态路径无硬引用、且整测 @EnabledIfSystemProperty
门控不入常规 mvn test;javadoc 死引用并入 Step5 Java 编辑清理。
验证:game-runtime 核心测试 211/211、_generic 5/5,删除无误伤。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 02:00:16 -07:00 |
|
zizi
|
a1e9265305
|
Merge 'feat/mac-amodel-foundation' → dev/2.0.0:A-model 地基(Tier1 agentic 优化)
并入 A-model 分支 22 提交:4 编排插件(hud-ui/scene-fsm/session-score/timer-scheduler,
各带 api.d.ts/impl/manifest/test)+ catch-fruit 样板游戏 + amodel-gen 工具链
(gen/m3/play/prompt/tools/publish.mjs)+ boot-game-host/all-plugins/plugin 扩展 +
source-project.schema.json 升 oneOf(1.0 gamedef-legacy / 2.0 A-model 多文件代码工件)。
唯一冲突 = contracts/agent-loop/source-project.schema.json 顶层 description(两侧都改):
取 A-model 的 oneOf 结构升级为基底,再补回 dev 侧的 tier2-边界 note(本 schema 限 Tier0/1;
tier2 真 Phaser 引擎另立独立 schema、不复用本路)——两侧意图互补不矛盾(HANDOFF 已预判)。
JSON 校验通过,oneOf 2 支 + 两侧意图均在。
dev/2.0.0 侧 ~20 提交(tier2 计划/细图/接口协议/agentscope 2.0.2 订正)全在 docs/tier2/contracts,
与 A-model 的 game-runtime 改动零代码重叠。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 03:33:30 +00:00 |
|
lili
|
4ed9d2a90f
|
test(saa): M3 openai 流式静默挂死最小复现(诊断脚手架)
门控 -Dsaa.stream.repro=1 + NEWAPI_KEY,不破普通构建。逐验:stream() 是否真流式 / thinking 开时 content 帧是否到达 / blockLast 是否返回。全程显式超时不挂 900s。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 19:45:33 -07:00 |
|
lili
|
d342de088e
|
feat(saa): 零-LLM driver 内置绑定 injectDriverByArchetype + 5 单测
design 只声明 gatespec 不写 driver→amodel 路无人绑 driver→游戏停菜单→九门 E_live/H 名存实亡。按 classify archetype 确定性补内置 driver(经营/反应→tap occupied、三消→placement、跑酷→key-cycle),显式 driver 不覆盖、无合适内置(如 bubble)不强补。WIP:未在 mini mvn 验;archetype→targets 契约假设正于 driver 调查中复核。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 19:45:33 -07:00 |
|
lili
|
cbe42933d0
|
fix(saa): B 收尾·客观门跨层对齐 advisory——objectiveGatesPass 读 verdict.advisoryGates
根因:8ac4ccc8 的「未驱动 E_live/H 降 advisory」只落在 play.cdp.cjs(verdict.pass/
advisoryGates),未传到生成环消费层 SaaGenNodes.objectiveGatesPass——后者把 E_live 当
硬客观门、完全不读 advisoryGates。未驱动游戏(打地鼠 menu 态无 driver→phase 恒 menu→
_forensicsView distinctStates:1)E_live 每轮必挂→1+maxRepairs(5)=6 次 M3 假失败救场,
与既有 line651 注释里早修过的 H_progress「空跑 8 轮救场/302K token」同一类病(driver
依赖门绑架生成)。
修:
- objectiveGatesPass / summarizeFailedGuards 读 verdict.advisoryGates 同口径降级。
advisory 门要求【存在】(保住 C2 崩溃安全:缺门=harness 未跑完=失败)但【允许 pass=false】
(未驱动无法公平验活性);driven 时 play.cdp.cjs 不列入 advisory → 自动恢复致命,回归不破。
- objectiveGatesPass 提包级可见(与 summarizeFailedGuards 同范式),供纯逻辑单测。
验证:SaaFullGraphE2eGateLogicTest 23/23 PASS(+5 advisory 案:未驱动 E_live→过/
driven E_live→挂/缺门→挂/全过/反馈跳 advisory)。e2e 已实证 verdict.pass=true、
E_live/H 列 advisory(advisory 跨层生效)。
注:e2e 绿基线仍被一个【独立·先存】问题阻断——过门游戏不产终态回调(player 节点 M3
首次在 pass 路被触达,疑 M3-vision 挂),非本修引入,下一步处置。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 23:38:59 -07:00 |
|
lili
|
db3c42c5de
|
feat(amodel): 运行时日志基建(ctx.log+插件自带+harness捕获) + 九门A(play-spec透传)+B2(F_wiring) + 预算
创始人指令:游戏要有日志,读日志诊断运行时问题,模板+可选插件自带日志。
日志基建:
- plugin.js:受控面 ctx 加 log(tag,...args) → window.__gameLog 环形(800)+ console;用受控 time.nowMs。
- boot-game-host.js:B2 插件 Proxy wrap 顺手记插件语义调用进 __gameLog(跳 draw/update/current/get 等高频)→ 插件自带日志免逐个改;recHook 仍记 __engineCalls 供 F_wiring。
- _template game-logic.js:ctx.log 生命周期(init/scene play/over)→ 模板自带。
- play.mjs smokeBoot:抓 __gameLog 写 staged evidence/game-log.json + 末12条进 out.logTail(boot 成败都抓,失败时最有诊断价值)。
- 实证:scaffold→smoke logtest → logCount:165、game-log.json 有 [p:sceneFsm:define/start]+[game:init];读日志诊断可用。
九门对齐(C 之 A+B2,recon ad3c564):
- A(SaaGenNodes validateAmodelStaged):amodel 路 validate-ok→play 短路了 scaffoldNode(唯一写 play-spec.json 处)→ 补写 play-spec.json(从 design 产 K_PLAY_SPEC)→ 九门可驱动(治 E_live/G_input/H_progress 机制)。
- B2(boot-game-host):插件 recHook wrap → F_wiring callCount>0(实证 e2e 从 [E_live,F_wiring] → [E_live,H_progress],F_wiring 已过)。叠加式,factory/gamedef 零回归。
预算(gen.mjs):maxSteps 45→70 / maxWallMs 12→20min —— SAA design 富化 brief 比 raw(7步)需更多步。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 22:21:29 -07:00 |
|
lili
|
3fbb3197f4
|
feat(amodel-gen): Phase 2 批B — SAA 图 amodel 路集成(集成方式C)+ Fix A(validate 尊重 harness ok)
集成方式C:SAA generate 节点 shell-out 已验证 harness `gen.mjs --mode saa`(amodel flag 旁挂)。
- AigcExecutorProperties: saaSourceMode += amodel(Javadoc;默认仍 factory)。
- SaaGenNodes: 新增 runProcessSplit/SplitProcResult(stdout/stderr 分流,末行 JSON 不被 stderr 污染);validateNode amodel 分支 + validateAmodelStaged。
- SaaStudioNodes: generateNode 6 参重载(amodel 短路 generateViaAmodelHarness:argv 透传 brief+key、解析末行 JSON);okElseRepairOrEscalateOrGiveupAmodelAware(validate-ok→play 短路)。
- SaaStudioGraph: assemble/build apiKey/llmBase 透传链 + validate 条件边 amodel-aware + "play"边。
- SaaGraphDispatcher: ensureGraph 传 apiKey/llmBase。
Fix A(本次发现并修的真集成 bug):gen.mjs done-gate 顺序 stage→smoke,smoke 失败 done 被拒但 stage 已落盘陈旧坏 bundle(harness 返 ok:false/stagedDir:null 却留文件)。原 validateAmodelStaged 只查产物存在=误过坏 bundle→路由 play→九门崩+白耗~10min。
修:generate 置 K_AMODEL_GEN_OK(成功 true/失败 false,不再自增 failCount);validate 先尊重该标记(false→救场,不读陈旧产物),failCount 由 validate 统一计一次(与 factory/gamedef「generate 产出、validate 计数」同口径)。
验证(严格):
- mini 权威 mvn test-compile BUILD SUCCESS(main+test)。
- 83/83 SAA 确定性回归单测全绿(门路由18/拓扑30/节点回归14/history重载4/dispatcher9 等)——factory/gamedef 零回归。
- amodel e2e dispatch→generate→validate→路由 实跑通;控制测试 pristine _template scaffold-saa→build→stage→smoke PASS(env/信封/插件正常)。
- Fix A 行为确认:修后坏 bundle 被 validate 正确拒(未到 play);修前 breakout 坏 bundle 到了 play。
未达(解耦·非本集成范围):amodel e2e 仍 0/1——M3 生成质量 boot 崩 `Cannot read properties of undefined (reading 'w')`,跨 breakout+whack 复现;pristine 模板 boot 干净→证 M3 代码问题,非集成/env/harness。属 Phase 3/4 生成质量门(D1=A:factory 默认直到 amodel≥60%)。
零回归:amodel 纯旁挂 flag,saaSourceMode 默认 factory;amodel=false 时全部新分支跳过,新"play"边对 factory/gamedef 不可达。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 06:21:12 -07:00 |
|
zizi
|
7ecd616eb8
|
docs: tier2 口径对齐批量修(① 旧 Cocos 引擎口径→Phaser/Pixi 两轴 · ② 第二轨/控制面在各 SoT 登记;15 档跨知识层/架构/前后端/产品/运营)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-21 16:58:59 +00:00 |
|
lili
|
7aeb8f5475
|
fix(saa): GAMEDEF_SYSTEM 加贪吃蛇(snake)异构 few-shot——补 round-1 缺的网格步进例(bug#5 round-2)
round-1 加 breakout 后射击已保真复原,但贪吃蛇仍坍缩成躲避=缺 snake 例。本仓无 snake 金样,
按 gameDefinition schema 自写一个最小可跑参照4:
- 蛇身=挂【状态实体 gamestate】的有序格子数组 G.body(头在前),对齐保真铁律"蛇身实体数组(挂状态实体)"——
避开 self 跨 behavior 不共享的死法;dir/food/step 同挂 G,引用赋值持久。
- 机制忠实:turn 读方向键(禁反向)→ tick 定时步进(0.16s)新头入、无食去尾;吃食 body 变长+rt.addScore+
食物换位(bounded do-while,非 while(true));撞墙或撞自身 rt.lose();每步按 body 重绘 seg 实体免逐段维护索引。
- 进展落 rt.addScore/rt.destroy(运行时真暴露),不藏 snakeLength 自定义标量。
保真铁律同步:三参照→四参照、加"参照4是贪吃蛇"反坍缩约束、异构形态加"网格定时步进"。
控长:GAMEDEF_SYSTEM 15058→17461B(+2.4KB),总~17.5KB 远在模型上下文内——llm_error=LLM 调用耗尽/截断
(FailureReasonEnum.LLM_ERROR),非 prompt 过长拒绝,故不动既有载荷型告警(避免回归 round-1 已证的射击保真)。
证据:snake JSON 过 build-from-source.mjs --validate(exit 0)+ 全量 build 成 factory(exit 0);
aigc-server mvn -o clean install -DskipTests 编译过(MVN_EXIT=0,jar+SaaPrompts.class 新鲜产出)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-21 14:40:15 +08:00 |
|
lili
|
9176abe923
|
fix(saa): GAMEDEF_SYSTEM 加保真铁律 + breakout 异构 few-shot——修生成坍缩(bug#5)
根因:GAMEDEF_SYSTEM 仅内联 2 个 few-shot(躲避 + tap-targets 打地鼠)、
无 brief-fidelity 约束,模型对任何题面"挑最近的套"——动作类抄躲避、
点击类抄打地鼠,打砖块/贪吃蛇/射击全坍缩。
两处最小修(对齐根因 1+2):
1) 在三个参照前置【★保真铁律★】:参照仅示范结构与 rt 面用法、不是玩法清单;
必须按题面产对应实体/行为/规则(给打砖块/贪吃蛇/射击/跑酷范例);
严禁因参照是躲避/打地鼠/打砖块就把题面玩法坍缩成它们。
2) 内联【参照3·breakout】(挡板+球+砖墙+反弹消砖、清砖判胜、球落底判负),
源自过门金样 contracts/agent-loop/skeletons/breakout.json,结构精简对齐 rt 面,
与原 2 例并列、打破"只有躲避+打地鼠"偏置(三参照覆盖异构三形态)。
验证:① 三参照 JSON 均合法、顶层键齐(entities/components/behaviors/scenes/rules);
② 参照3 经 game-runtime createRuntime 真驱动跑通——砖墙24块/撞砖计分/消砖
remaining降/球落底 lose-latch/指针控板,全程零抛错;③ gd-archetypes.test 4/4 不回归;
④ aigc-server 离线编译通过(文本块转义合法)。
不重新生成游戏(重生验证由部署后另做)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-21 13:56:45 +08:00 |
|
lili
|
490dc6293d
|
fix(saa): 包级 assets 接通源 sourceProject.assets[]——闭合产消断链(兑现 engine-E2/E3 消费侧 TODO)
gen-done 出包历史上把包级 assets 硬置空(setAssets(emptyList)),丢掉源
gameDefinition 已落库的六类源资产(game_source_project.source_json 顶层
assets[6]),造成产(asset 节点写源)→消(组包)断链。
改 SaaGraphDispatcher.buildCallbackReqVO(in-JVM SAA 路,即 generic/engine
任务真实落包路):新增 extractSourceAssets(s,traceId) 从图终态 K_SOURCE_PROJECT
抽顶层 assets[] 忠实映射进 reqVO.assets;DifyCallbackTxService.buildGamePackage
读 reqVO.getAssets() 即自然带进 GamePackage.assets。
- 形态:源 assetSpec={id,category,ref,provider}(source-project.schema.json
#/$defs/assetSpec),运行时 gd-runtime 经 gdef.assets 同形消费;geom:<cat> ref
系几何占位资产引用,原样透传,不伪造包契约 strict AssetSpec 的
type/url/hash/bytes/mime(无真图/真 sha256,伪造即脏数据)。
- best-effort 非阻断(严格 additive):源缺失/空白/非 JSON/无 assets 键/非数组/
异常一律回退空集,绝不外抛、绝不打断 SAA 生成;存量无源回调字节零变化。
- 复用既有 parseTrace + TRACE_MAPPER(只读,无共享可变状态),不引新依赖。
不动 AigcGenerateExecutor:440:该处为进程内 clicker/merge 旧路(generic/engine
经 dispatchGeneric 早返,不达此行;worker 回调由独立 reqVO 驱动),作用域无
sourceProject,改它即凭空伪造,故按现状保留(对齐 run_batch.py assets:[])。
验证:mvn -o clean install -pl game-module-aigc-server -am 编译 BUILD SUCCESS;
DifyCallbackServiceImplTest+AigcGenerateExecutorTest 41 tests 0 fail(含
in-process 路 getAssets().isEmpty() 断言仍过,确认未回归)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-21 10:50:40 +08:00 |
|
lili
|
ad22be9b3a
|
feat(saa): Phase 2 Template-First gamedef 骨架机制(flag 旁挂默认关;A/B 负面=不迁移到便宜 thinking-off)
机制(OpenGame +10.1 杠杆试落):
- SaaSkeletons 加载器:archetype→3 金标准过门纯净骨架(gd-breakout/tictactoe/simon,verdict.pass=true+rt纯净+过 Phase3 坑门),按 (tick/input) profile 映射;经济类(merge/idle/tycoon)无近似骨架不登记=走无骨架,绝不喂低质骨架。
- 注入:SaaPrompts buildGameDefMessages(openai 首生成)/historyFirstUser(anthropic 首轮) 追加骨架段(结构参照、非照抄,题面不符以题面为准);救场轮不注。
- pom 拷 contracts/agent-loop/skeletons/*.json 进 classpath。flag -Dsaa.gen.skeletonFirst=1 开,默认关=生成字节零变、零回归。
A/B 实测(thinking-off + skeleton conc=12 vs A 基线):
- 7/12(58.3%) ≤ A 8/12(67%),失败仍 E_live 哑火(#4,5,9,11,12) → 骨架没把基线拉向 91.7%。
- 结论:+10.1 骨架杠杆【不迁移到便宜模型+thinking-off】——哑火是推理缺口(thinking 补)、非结构样例缺口(骨架补不了)。thinking-ON(anthropic 91.7%)仍是唯一真杠杆。
- 处置(创始人定 A):保留机制 flag 关、可逆——换更强模型/配合 thinking 时或有用;默认不启用。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 12:53:02 -07:00 |
|
lili
|
5bc0afb4bb
|
fix(saa): 复审整改 C2 客观门必达集 + M3 碰撞尺寸不拷顶层 + Phase 3 玩法坑离线门
CodeRabbit/Codex 双复审整改(针对 4e5a7bbf):
- C2(critical, SaaGenNodes.objectiveGatesPass):改「A-E 五门全在场且 pass,缺任一即失败」。旧「出现才查」会被 harness 中途崩(runDriver 在 D/E 前抛、未 try/catch)钻空子——verdict 只剩 A_boot/C_frame 即 sawObjective=true 放行=崩掉的游戏判过。缺门=未跑完=失败才安全。
- M3(major, gd-runtime RESERVED += w/h/r):碰撞尺寸 w/h/r 不拷实体顶层——它们是 rt.overlap 读顶层的命中框(缺省16),拷上去静默改存量游戏命中框且违反 prompt 契约「顶层 e.w 永 undefined」。
- Phase 3(OpenGame +6.9 离线 linter):build-from-source 加两族【零误伤】玩法哑火坑门——①.tags 是 Set 误用数组法/下标/length ②漏 rt. 前缀裸引擎调(补 LOGIC_BANS 不拦 getEngine/getInput/restart 的洞,含此坑源装配过却运行期夭折)。命中→repair,真玩前修省一轮 CDP。self 跨 behavior 泄漏因误伤过门款(gd-tictactoe/simon 带 bug 却过门,self 确 per-behavior)降级待非阻塞 warning 通道。新增 gameplay-pitfalls.test.mjs:正例拦坑 + gd-breakout/tictactoe/simon 零误伤,32/32 全绿(含既有回归)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 12:28:41 -07:00 |
|
lili
|
4e5a7bbfb9
|
feat(saa): M3 生成质量收敛——客观门解耦 + 流式 anthropic 思考 → e2e 11/12(91.7%)
rc 门解耦修复(SaaGenNodes.playNode):play.cdp.cjs 退出码=九门聚合(verdict.pass?0:1),driver 门(G/H/I)挂→rc=1 反向否决客观 pass,致 Phase 1 客观门解耦形同虚设、空跑救场烧 token;改 rc∈{0,1}+objectiveGatesPass,all9 旧口径保留可回退。
思考治理(SaaStudioGraph):关 openai 路 M3 adaptive thinking(内联污染 JSON+撞 max_tokens 截断);改走 Anthropic Messages 协议(原生 thinking 块分离)+ StreamingCallChatModel 流式收取(治阻塞整取 SocketTimeout;#4407 对 spring-ai 1.1.2+生成无工具调用不触发,n=1 实测确认)+ webClient NO_PROXY + max_tokens 256k。
配套:gd-runtime 去脚枪(Plan A·S2 自定义标量拷实体,治冻屏) + play.cdp seek-food 驱动 + Phase 1b prompt 解耦 + e2e 旋钮(protocol/maxTokens)。
实测 conc=12 gamedef:thinking-off 8/12(67%,E_live 哑火×4) → thinking-on 11/12(91.7%,哑火修 3/4,残留 #7 打地鼠);代价 ~10x 慢 + 1.6x token。按创始人拍板以 n=12/91.7% 宣告达标(放宽原 plan003 n>=30 门)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 11:26:26 -07:00 |
|
lili
|
0cd1496399
|
feat(saa): U5 openai 格式 M3 路 — thinking:disabled(extraBody)+ openai NO_PROXY
Plan A U5「切 OpenAI 格式」(创始人 2026-06-19):
- model(): MiniMax 系经 OpenAiChatOptions.extraBody 注入 thinking:{type:disabled} 关推理(治 chat.completions 内联 <think> 污染;探活实证 reasoning:effort:none 不被网关认、唯 thinking:disabled 有效);仅 model 名含 minimax 注入,deepseek 字节零变
- openAiApiNoProxy(): openai 路同 anthropic 旁路系统代理(macOS clash 把 Tailscale IP 走代理→502);dispatcher openai 分支改用之
实测(openai+M3+thinking off,K=10/diverse-10):0 超时/0 <think>残留/0 502 = 路干净;成功率 1/10(10%)。
三臂对照(同 diverse-10/K=10):deepseek(anthropic) 30% > M3(anthropic+thinking,超时假象) 10% = M3(openai+thinking off,干净) 10% → M3 在 gamedef 生成上真逊 deepseek,非协议/超时假象。失败主因 llm_error(无有效 bundle)+ 到门者 F_wiring/G_input/E_live/H_progress(driver/引擎接线)——两模型同款,杠杆在 pipeline/接线非换模型。
不碰 gd-runtime/build-from-source(Plan B 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 11:47:46 -07:00 |
|
lili
|
1cd199cb3c
|
feat(saa): U5 M3-only override(bake-off)+ 10 品类多样验证集
Plan A U5「只用 M3」(创始人 2026-06-19;deepseek 留作最终模型对照):
- SaaStudioGraph.Models.allSame(model): 全 11 角色统一模型工厂(bake-off 用)
- SaaGraphDispatcher: saaForceModel 非空→Models.allSame(全角色统一、无跨家回退)+ 单模型路日志;空→stage1 默认(deepseek 主力,字节零变)
- AigcExecutorProperties.saaForceModel(默认空=字节零变)
- SaaFullGraphE2eTest: -Dsaa.e2e.model flag(全角色统一模型)+ [config] 打印
- saa-e2e-briefs-diverse10.txt: 10 个不同玩法品类(覆盖 U4 全 8 driver 家族 a-h),优于按行序前 10(仅 4 品类聚集)
验证:编译绿(test-compile exit 0)。默认 saaForceModel 空→stage1(deepseek)字节零变,仅 dispatcher=saa 生效。
实测对照(K=10/diverse-10/anthropic):deepseek 主力基线 3/10(30%,主因生成 llm_error,到门者败于 F_wiring/G_input/E_live/H_progress);M3-only 基线量测中。
不碰 gd-runtime/build-from-source(Plan B 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 10:22:45 -07:00 |
|
lili
|
5fde4e2609
|
Merge remote-tracking branch 'origin/dev/2.0.0' into feat/mac-gamedef-qc-concurrent
|
2026-06-19 09:35:43 -07:00 |
|
lili
|
b3f2fe8e85
|
feat(saa-e2e): U5 量测前置 — e2e 接线 anthropic 协议 + 可配端口基址(默认字节零变)
U5 收敛环前置(量测面 additive,默认全字节零变):
- -Dsaa.e2e.protocol(默认 openai)→ props.setSaaModelProtocol:补 U1 量测面孪生(P1-6)。旧版无此接线 → 会量 openai 默认路而非 anthropic = 违 R1「量==发、在用协议=anthropic」。
- -Dsaa.e2e.playPortBase/cdpPortBase(默认 4320/9222)→ props.setSaa{Play,Cdp}PortBase:与本机 superpowers-chrome(持 9222)等进程共存防撞(量测可 cdpPortBase=9322;serve-and-play 净场只杀本槽端口、不误杀他者)。
- [config] 打印增 protocol/playPortBase/cdpPortBase。
验证:pilot 实跑 [config] 行确认三 flag 生效(sourceMode=gamedef, protocol=anthropic, playPortBase=4320, cdpPortBase=9322);编译绿。默认 openai/4320/9222 = 现行字节零变。
注:同次 pilot 揭网关 deepseek 全系(flash/pro/chat/v3)在 svip 组无渠道(全 503 model_not_found)阻塞生成,唯 MiniMax M3/M2.7 可用——属网关侧、待创始人裁;本提交仅 harness 接线,与模型可用性正交。
不碰 gd-runtime/build-from-source(Plan B 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 09:33:57 -07:00 |
|
lili
|
12abfbac4a
|
feat(saa): U3 gamedef 量测路 + 有界并发池 harness(默认 K=1 字节零变)
003-U1 U3「量对路 + 有界并发(量测用)」:
- AigcExecutorProperties: saaConcurrency(默认 1)/saaPlayPortBase(4320)/saaCdpPortBase(9222) — 默认全为生产字节零变值
- SaaGraphDispatcher: newSingleThreadExecutor→newFixedThreadPool(K) + Semaphore(1)→Semaphore(K) + K 个错开端口槽池(第 i 槽 playPort=base+2i/cdpPort=base+i);runGraphAndCallback 起手 take 槽 + acquire 许可、整 job 持槽、finally 必归还防泄漏;端口覆盖放 runGraphAndCallback(保 buildInputs 签名不变,反射测兼容);构造期 null-properties 兜底(K=1+默认端口,修 TraceTest NPE);allocPortSlots/normalizeConcurrency 抽为可单测纯函数 + 共享面审计结论入注释
- SaaFullGraphE2eTest: 加 -Dsaa.e2e.sourceMode(默认 factory,量 gamedef 须显式设=修发现②量错路) + -Dsaa.e2e.concurrency(默认 1)
- 新增 saa-e2e-briefs-gamedef.txt(34 条多品类≥30) + saa-e2e-briefs-holdout.txt(12 条留出集,与调优集及内置 ALL_BRIEFS 零重叠)
量对路(发现②修复):旧 e2e 只 setDispatcher("saa") 未 setSaaSourceMode → props 默认 factory(iife),量的是旧路;现 setSaaSourceMode(sourceMode),量 gamedef 真基线须 -Dsaa.e2e.sourceMode=gamedef。
K=1 字节零变:newFixedThreadPool(1)≡单线程串行 + Semaphore(1) + 仅槽 0=[4320,9222],与改造前逐字一致。共享面审计(只读 serve-and-play.sh,脚本未改):K>1 下端口为唯一真冲突点,净场 lsof|kill 只杀本槽端口、static-serve 只读共享根、evidence 按 gameId 隔离 → 跨 job 安全。
并发口径(plan 2026-06-19 创始人指令对齐):K 是量测用「真玩并发」上限,受 Mac 实时九门帧预算硬限(C_frame/E_live,~3-4),非 M3 API 限;生成端(网络限)的宽并发(gen≫play 时)留 U5 量 gen:play 占比后按需解耦,不在本单元。
验证:编译绿;GateLogic+TraceTest+NodesRegression+PickAnswer 指定集独立复跑 exit 0、零失败标记;agent -am 全 SAA 包 101/0/0/3skip。真跑 K 路校准(verdict 对等+结构隔离)延 U5 执行期。
默认 K=1/sourceMode=factory 现行字节零变;不碰 gd-runtime/build-from-source(Plan B 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 08:48:53 -07:00 |
|
lili
|
08aa0c13d0
|
feat(saa-prompt): U4 DESIGN_SYSTEM 8/8 driver 决策树 + gatespec 约定
003-U1 杠杆③(上下文)+②(门约定):
- DESIGN_SYSTEM 规则③补齐至 8/8 driver(对齐 play.cdp.cjs:206-214):补 tap-pairs/key-cycle/drag-aiming/aim-fire(各含何时选/worked-example/反例/命门),旧 none 重标 (i)
- 命门:障碍/目标跟踪类须显式产命名实体(nextGap/nextPlatform/ship.angle)+ 消除类 tap-pairs 得分落 score;drag-aiming 抛射 launch 常数 gd 路难导出→诚实标「优先 iife 源」
- GAMEDEF_SYSTEM 同步 driver 命名/进展约定;门约定:消除类 tap-pairs+score 过 H、I_control 按 control-scheme 分型(不改门本体)
验证:编译 BUILD SUCCESS;回归 49/0(SaaStudioNodesRegressionTest 14〔原8+新6 gatespec 保真:8 driver verbatim+逐 driver 字段+ballPath 归一隔离〕+ topology 30 + pickAnswer 5)。
只动 SaaPrompts 常量 + 测试;不碰 gd-runtime/build-from-source/.agents。
跨 Plan 遗留(转交 6c6g/Plan B):drag-aiming gamedef 路需 gd-runtime entityView 增 launch{gravity,powerScale} 投影通道才能解析瞄准;aim-fire 双路 targetsPath 命名分叉(iife asteroids / gamedef targets)已分别教对;真效(driver 选对率)留 U5 量。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 08:26:41 -07:00 |
|
lili
|
766749d3c1
|
feat(saa): U2 连续对话救场(text 历史)+ P1-1 交替修 — 简化自 thinking 保留
003-U1 U-B(创始人 2026-06-19 定:简化为 text 历史):
- 历史保留:anthropic 路把上一版【答案文本块】跨轮入历史(K_MSG_HISTORY_GAMEDEF/FACTORY 隔离;ReplaceStrategy+节点内 read-append-write),连续对话救场=模型看上一版答案+失败 verdict 增量修(SaaPrompts.historyRepairUser 去"重出完整模块")
- P1-2(对抗验证反编译证):stock spring-ai-anthropic 1.1.2 出站 buildMessages 丢 thinking 块→内存留 thinking 一下发即拍平成 text→"interleaved 保留"不可达;故 appendHistory 滤 thinking 块(isThinkingMsg=metadata 含 signature)只留答案,简化 boundHistory(最近 K=3 轮 text)。真 interleaved 留 plan T-FUTURE-1
- P1-1(对抗验证证会 HTTP 400 硬崩):失败轮 append 悬空 user→连续 user→Anthropic 拒。双保险修:失败轮整轮不入历史 + assembleConversation 末条 user 去尾
- openai 路 historyEnabled=false 字节零变(useHistory=historyEnabled&&!regeneratePath;builder/SYSTEM 一字未动)
验证:serde/fidelity/失败路 6/0(含 FlakyChatModel 失败路回归门 assertStrictAlternation)、回归 45/0、全 saa 包 92/0/6、烟测 1/0;真网关多轮交替 wire 验证证 P1-1 修有效(system+user+assistant+user 无 400)。
不碰 gd-runtime/build-from-source/.agents(Plan B/6c6g 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 08:16:07 -07:00 |
|
lili
|
19f666cd5d
|
feat(saa): U1 用对 M3 — Anthropic 协议 client(flag 旁挂)+ 多 Gen 取答案 + per-role thinking budget
003-U1「用对 agentic M3」:
- AigcExecutorProperties: saaModelProtocol(默认 openai)/saaAnthropicBase(host 根)/saaThinkingBudget
- SaaStudioGraph: RoleModelFactory + anthropicModel(host 根 baseUrl·x-api-key·Proxy.NO_PROXY·per-role budget=min(全局,maxTokens-1024)≥1024 才开 thinking) + openAiFactory(逐字等价旧路) + factory-based build 重载
- SaaGraphDispatcher: ensureGraph 按 saaModelProtocol flag 选 openai/anthropic 工厂(openai 默认路调用不变)
- SaaStudioNodes: pickAnswerText 遍历 getResults 取「无 signature 末块」为答案(单 Gen=旧路字节等价),替 callAndRecord/judgeVision 的 getResult().getText()
实测定死(spike + 创始人 2026-06-19 网关治本):x-api-key→M3 原生 thinking 分离 block(getResults size=2,thinking 带 signature);Bearer / 带 /anthropic 前缀 = 坑。
验证全绿:编译;烟测 size2 取对答案;P0-2 专项(全 11 角色 assemble 不崩,SaaAnthropicAssembleTest 2/0/0);回归 43/0/0(openai 字节零变);依赖树 spring-ai-anthropic 1.1.2 无漂移/无 autoconfigure。
flag 默认 openai 现行字节零变;不碰 gd-runtime/build-from-source(Plan B 域)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 06:18:55 -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 |
|
lili
|
de3bf4cb62
|
fix(compliance): 消 CompliancePolicyController bean 名冲突(P0 孪生,补齐 84c6bd02 漏修)
84c6bd02 仅修 ComplianceAppealController 一对;隔离 :48090 门又拦下孪生:CompliancePolicyController
(admin/app 同名裸 @RestController) → 默认 bean 名再撞 → 仍 ConflictingBeanDefinitionException 启动失败。
全仓扫 108 个裸 controller,这是唯一剩余同类冲突。各加显式 bean 名:
admin→compliancePolicyAdminController / app→compliancePolicyAppController。
修后全仓再无重名裸 controller(扫描实证)+ 无 @Service/@Component 同类冲突 → dev/2.0.0 后端应可启动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-19 04:59:19 -07:00 |
|
lili
|
84c6bd0233
|
fix(compliance): 消两个 ComplianceAppealController bean 名冲突——dev/2.0.0 后端无法启动(P0)
admin 与 app 两包下同名类 ComplianceAppealController 均用裸 @RestController → Spring 默认 bean 名
都是 complianceAppealController → ConflictingBeanDefinitionException → 整个 context 启动失败。
staging 重部署隔离 :48090 安全门拦下此回归(live 未切、零回归)。各加显式 bean 名消歧:
admin→complianceAppealAdminController / app→complianceAppealAppController。
路径 /compliance/appeal 相同非冲突(框架按包名 controller.admin.*→/admin-api、controller.app.*→/app-api 加前缀区分)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-19 04:50:24 -07:00 |
|
lili
|
079778fc03
|
feat(saa-prompt): DESIGN_SYSTEM 补 flap-to-gap/seek-x driver——闭合 driver 词汇缺口上半(cause#2)
规则③ 由 (a)paddle/(b)tap-targets/(c)none 扩为含 (c)flap-to-gap(Flappy:bird.y/bird.vy/nextGap.y)
+(d)seek-x(Doodle:bird.x/nextPlatform.x);键到 gd-runtime 现有按实体 id 投影(无需改引擎),要求代码
agent 把控制体+下一障碍建成命名实体(bird/nextGap/nextPlatform)每帧更新。
实证(deepseek flappy/doodle/runner):driver 选型已修——模型现正确产 flap-to-gap/seek-x(此前 wrong/none)。
cause#2 下半未闭:便宜模型不稳产 nextGap/nextPlatform 障碍跟踪实体(doodle 经 repair 产出、flappy/runner 仍缺)
→driver 半接→仍挂;属生成能力(障碍实体生成)+ repair 反馈须点名缺失实体,留 6c6g/003-U1(余 4 driver
tap-pairs/key-cycle/drag-aiming/aim-fire 同法,契约见 play.cdp.cjs)。SaaPrompts 经 mvn BUILD SUCCESS。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 03:04:23 -07:00 |
|
lili
|
d5d3d09b0f
|
fix(gen-qc): cutover 早读三修——并发化 + assert 进展过滤 + M3 thinking 关闭/宽松解析
1) 并发化(gamedef_quickcheck): ThreadPoolExecutor 跨局并行,每局独立 port/cdpPort(4400+i/9300+i)
+ flush 日志;局内 repair 链恒串行→聚合过门率与串行等价。
2) assert 进展过滤(SaaPrompts.extractGatespec 产线 + quickcheck 镜像): 有进展断言时只留进展断言
(increased/decreased/changed/比较),丢终局态断言(phase/result==gameover/win、误编码 score=="gameover")
——bot 限时常到不了终局但 score 已涨=真有进展(tictactoe 0→9/saolei 0→12 假阴修正);无进展断言则全留
(规避类 result==win 为唯一信号)。终局完成度另由 expectLatch 把关。
3) M3 协议修(_client._extra_body + extract_json_obj): MiniMax-M3 OpenAI 端点默认 thinking=adaptive、
<think> 内联进 content→复杂局飙 token→max_tokens 截断丢 JSON(假"parse 失败")。官方关法 thinking=
{type:disabled}(按 model gate MiniMax);严格 json.loads 失败回退 json_repair(镜像后端 looseParse)+
<think> 剥离兜底。
实证: M3 parse 6/13→2/13、过门 2→3/13,与 deepseek(4/13)同档=M3 不弱(旧 2/13 系截断伪象)。
SaaPrompts 经 mvn 反应堆 BUILD SUCCESS;Python 经 py_compile+单测+真跑。快走查口径;权威 cutover≥60% 在 mini-desktop。
产线 follow-up(6c6g): Java M3 fallback 路同款 thinking 截断潜伏 bug,须补 thinking:disabled。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 03:04:23 -07:00 |
|
lili
|
730b399dd6
|
test(saa): 003-U1 验收门工具化——SaaFullGraphE2eTest n≥10 + minSuccessRate 硬门 + token 成本会计
把 SaaFullGraphE2eTest 从「内置 5 条 / 只断≥1 跑通」改造成可作 flip 前置硬门的客观量测工具
(plan 2026-06-18-003 / 003-U1;该路代码 001-U1~U4 已在 dev/2.0.0 落地,本单元只工具化验收门):
- brief:内置扩 5→12 条多品类(偏 realtime/physics/tap-targets/clickable)+ -Dsaa.e2e.briefFile
外部文件(行式,去空白/跳空行/跳 # 注释,解析空则回退内置);-Dsaa.e2e.n 取前 K(未设=全量)。
- 成功率门:-Dsaa.e2e.minSuccessRate 可配硬断言;默认不设=仅存在性(保 003-U1「先实测真基线再收敛」、
不破普通构建),显式 0.8 即 flip(003-U2)前置硬门。
- 成本会计:从回调 trace best-effort 抽 prompt+completion token + 升 stage2 计数作成本证据;
-Dsaa.e2e.maxTokensPerGame 仅软警告不硬阻断(遵创始人「质量优先、允许临时破价、记账对账」)。
¥折算 blocked on F3(SaaGraphDispatcher cost 整段省略,§6.3)→ 不造假¥。
- 纯逻辑抽 8 静态方法 + 新增模型无关单测 SaaFullGraphE2eGateLogicTest(覆盖 happy+边界)。
验证:mvn test-compile 全 reactor BUILD SUCCESS;SaaFullGraphE2eGateLogicTest 12/12 过;
e2e 无 -Dsaa.e2e=1 仍 Skipped(门控完好)。质量收敛到≥80% 须 mini-desktop 权威量测(blocked,非本单元)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 16:30:43 -07:00 |
|
lili
|
5f2d0021fd
|
fix(telemetry): P-OPN-08 评审P2整改——公开统计下游异常软降级零汇总(契约永不报错·对齐list非脆失败)+测试
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 13:56:42 -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
|
3e04456097
|
refactor(studio): U6 上传归属对齐创始人裁定——撤 studio /asset/upload(字节走共享 infra),studio 改 ref 登记;浏览/选用/assetContext + 评审整改不变
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 12:12:04 -07:00 |
|
lili
|
046c061d60
|
feat(aigc): U7 R-TPL 品类玩法模板注册(经营模拟/剧情互动/解谜闯关/TRPG/非遗科普·constants-only·克隆generic代码生成契约)
注册 5 品类玩法模板(business-sim/narrative/puzzle/trpg/heritage),替代单一 generic 状态:
- 3 处代码同源点:AigcTemplateConstants.SUPPORTED_TEMPLATE_IDS 加 5 ID(保留 generic);
PromptResourceLoader.TEMPLATE_RESOURCES 加 5 行(pom 通配自动复制资源,零 pom 改动);
AigcTaskServiceImpl.getTemplateList() 回填 5 TemplateRespVO(中文品类名/说明/示例 Prompt/封面占位)。
- 10 契约文件:每品类 1 prompt(克隆 generic-coder.md frontmatter 形态 + 品类引导正文,范式=agent 写
GameHostFactory 源码而非填 GameConfig)+ 1 schema(克隆 generic.schema.json 的 bundle 校验结构,
校验 bundleText/hasGlobalName/bundleRawBytes,draft 2020-12,非旧 config-fill)。
- GameConfigSchemaValidator 无需改(经 getAllTemplateSchemaTexts 自动消费 5 新 schema)。
- 不触 SAA/executor/dispatcher/graph 代码(plan001 领域),仅动模板注册面。
- 测试:PromptResourceLoaderTest 9 / GameConfigSchemaValidatorTest 11 / AigcTaskServiceImplTest 11 全绿;
启动自检 PromptResourceLoader ready + 校验器编译就绪含 5 新模板。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 11:45:39 -07:00 |
|
lili
|
bdf452d704
|
merge(tier1): U3 R-SOC 社区社交(评论/关注/排行ZSET/弹幕WS + 评审整改)
|
2026-06-18 11:31:32 -07:00 |
|
lili
|
03d59b1672
|
merge(tier1): U5 R-ADMIN admin运营(限曝光/导出/经营看板 + 跨模块只读-api)
|
2026-06-18 11:31:32 -07:00 |
|
lili
|
edc3436f7e
|
fix(community): U3 评审整改——P0 ZSET 移出事务(afterCommit) + P1 弹幕长度门/弹幕广播出事务/举报接缝去重 + P2 注释与公开读
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 11:30:07 -07:00 |
|
lili
|
a6f8f58d23
|
fix(studio): U6 codex 整改——P0 FileApi 移出事务 + P1 magic-byte类型校验/选用悲观锁/草稿态守卫
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 11:17:16 -07:00 |
|
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 |
|