460 Commits

Author SHA1 Message Date
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
def1f4244a docs(plan): Plan A 记 T-FUTURE-1 thinking 历史出站丢失(创始人指示:记录+未来解决)
stock spring-ai-anthropic 1.1.2 出站 buildMessages 丢 thinking 块→interleaved 保留不可达;U2 已简化 text 历史。
未来真解候选:① 自拼 AnthropicMessage 绕过 buildMessages ② 升 spring-ai 库版本 ③ 评估 interleaved 对生成质量真实增益。
触发:U5 收敛若证 thinking interleaved 是达 ≥80% 的关键杠杆则立项。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 08:16:07 -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
1590f39666 docs(plan): Plan A 实测纠偏 + 机器分工放宽 + 网关治本 + Plan B U1 基底对齐
- U1 协议/Approach/Files 实测定死(host 根 baseUrl 非 /anthropic、x-api-key 非 Bearer、Proxy.NO_PROXY、多 Gen 取答案靠 signature 键);必修三险①/R-1 标已解
- 机器分工(创始人放宽 2026-06-19):Mac 主力批量验证/收敛量测(能重载不休眠),mini-desktop 只出 final evidence
- 网关对 M3 原生 thinking 曾 ~50% 非确定性 → 创始人网关侧治本 → 稳定原生
- P0-2(单一 budget 撞小角色)→ per-role 自适应;P0-2 资产盲注脚软化(Plan B U1 db14845d asset-orphan 闭合)
- KTD8 运行时钉 = Plan B U1(db14845d)/dev 81c1b2cf

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 06:18:55 -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
b6cadd8394 docs(plan): plan003 Plan A gen-done 执行计划(用对 M3→≥80%→两步 flip)
Plan A = gen-done 生死门 = 003-U1(用对 agentic M3) + 003-U2(两步 flip)。
已过双评审(Opus 对抗式+可行性,代码核证)整改 5 P0 + 7 P1:
- Anthropic 多 Generation 响应形(block0=thinking,须遍历 getResults)
- checkpoint 序列化潜伏坑(e2e harness checkpoint-off 隐藏,staging 才炸)
- 独立性纠偏(量测执行 Plan B gd-runtime/build-from-source → KTD8 运行时钉)
- ≥80% 机制门口径(对资产质量盲)+ 并发共享面审计 + measure-first U-C 闸控
对齐 Plan B U1(db14845d,asset-orphan 已闭合)为收敛运行时基底。
Codex(codex-rescue) 未出可用评审 → §6.8 Opus 单评回退。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 03:04:23 -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
zizi
81c1b2cfa9 merge(planB U1): 引擎资产渲染 + asset 孤儿闭合(死代码修) → dev/2.0.0
Plan B(core-done) U1:六类资产 ref→assets→drawImage 渲染链路 + GAMEDEF_KEYS 孤儿闭合(assets 在 sourceProject 顶层正确抽取并入运行时 GameDefinition,消死代码)+ drawEntity shape:sprite(受控面只取宿主预载 boot.assets/运行时不碰 DOM/缺图源降级类目色占位)。已过 ce-code-review(P0 assets 层级/P1 契约同步/校验洞)+ 6c6g SHIP review。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:59:40 +00:00
lili
db14845d12 fix(review): U1 资产渲染——ce-code-review 整改(P0 assets 层级 + P1 契约同步 + 校验洞 + P2 群)
6-reviewer ce-code-review 揪出并整改:
- P0(api-contract,读 schema 实证): assets 在 source-project.schema sourceProject 顶层(非 gameDefinition,
  后者 additionalProperties:false)→ 原加进 GAMEDEF_KEYS 丢合规顶层 assets。改:validateSourceProject 从顶层
  sp.assets 抽取(容差回退 gd.assets)并入 cleaned.assets;GAMEDEF_KEYS 移除 assets;测试改顶层。
- P1(api-contract+project-standards 双证): runtime-api-2d.d.ts 同步—GameDefinition.assets / RenderComponent
  shape:'sprite'+asset?/ref? / AssetSpec / createRuntime boot.assets(contract-first)。
- P1(adversarial conf100 复现): 非字符串 asset.ref(对象)绕过校验→零 repair 信号死循环 → ref 须非空字符串。
- P2(adversarial+maintainability): id/ref key 空间歧义 → drawSprite 经 asset.ref 查 boot.assets(宿主按 ref 键)。
- P2(maintainability): 数组化循环复用 GAMEDEF_KEYS 去重 / placeholderColor 补 music 色 / 弃 c.sprite 别名 / 32px 具名 DEFAULT_SPRITE_SIZE。
- P2(project-standards+api-contract): 宿主预载半-wired → game-host.d.ts + boot-game-host.js 加 HOST TODO 指针。
测试: 重写 assets(顶层/非串ref/非数组/端到端) + sprite 7 路(ref键/无图/image=null/抛错/悬空/music/asset:0)。node --test src/host 31/31 绿。

残留(已 TODO 指针 + plan U1 剩余 + task 记录): 宿主 loadAssets→boot.assets 真 wiring(浏览器耦合、node 难测)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 01:32:07 -07:00
lili
73d3391696 feat(engine): U1 引擎资产渲染地基 + asset 孤儿闭合(死代码修)
plan 2026-06-19-001 Plan B · U1。
- build-from-source: GAMEDEF_KEYS 纳入 assets(原缺→line 101 strip 掉=六类资产产物永不被消费的死代码,
  评审 P0);assets 六类(sprite/character/effect/scene/ui/music)/ref 校验转 repair 信号。
- gd-runtime: drawEntity 加 shape:'sprite' 分支 → 经 boot.assets(additive,宿主 init 预载图源)drawImage 居中;
  无图源降级类目色占位 rect(前向兼容,宿主预载落地后自动转真图,不崩不空屏)。
- game-host.d.ts: additive 扩 boot.assets(assetId→{image})落实 init「装资产」意图,零破坏既有 boot。
- 测试: build-from-source「assets 存活白名单+六类/ref 校验」、gd-runtime「sprite drawImage/无图占位双向」。
  node --test src/host 31/31 绿(无回归)。

剩余 U1 wiring(单列·触宿主实现侧): 宿主 init 预载管线 asset ref→image map→boot.assets;
六类资产 demo 截图 + 孤儿闭合截图需 mini-desktop CDP。R11 代理判据待真图源接通后验。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:57:26 -07:00
lili
0518d24592 docs(plan): plan003 Plan B — Phase-1 core-done 验收闭环执行(双线拆分)
ce-plan 据 2026-06-19 验收闭环需求档产出 Plan B(core-done):引擎资产渲染(原003-U5)+
验收 harness(核心纵切e2e/广度抽检/8页走查/smoke)+ 双里程碑收口。
依赖排序:Phase1 六单元全独立(执行期可并行 fan-out)、Phase2 gated on gen-done(Plan A ≥80%产出)、Phase3 最终收口。
gd-runtime 整面归本档(解 U5↔U1 共面冲突,Plan A 走 DESIGN_SYSTEM)。gen-done(U1/U2)=Plan A 另 session。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:45:00 -07:00
lili
e5c0497d26 docs(brainstorm): plan003/Phase-1 验收闭环需求档(过 Codex+Opus 双评审)
ce-brainstorm「completed plan 003」产出:定义 plan 003 = Phase-1「done」验收判据闭环——
gen-done(A) ∧ core-done(B∧C∧D) 双里程碑独立收口 / 证据深度=核心纵切真机+广度抽检 /
生成 done 绑死已 flip saa / 设计完整性 rubric 已定标(5项×0-2·资产对位一票否决·均分≥1.4·N=8) /
U5 升 R4/R9 前置 / 性能可用性轴延后 Phase-2(风险接受) / 日历闸门项排除。
过 AGENTS.md §6.8 Codex+Opus 双评审,整改 5 P0+6 P1+多 P2 文内,3 跨档 TODO 落 003-U2/U5。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:04:27 -07:00
zizi
f7f1262b05 docs(plan): 生成质量 v3 战略转向——用对 agentic 的 M3 提主路(Anthropic协议+thinking/历史保留+工具循环)
- 根因分析档 v3 重写:整合二轮双评审 P0(n=5 非 13 / M3 论点降工作假设 / 点击消除 H 归上下文非门测错 / a3 救场回传未做 / best-of-N 整图串行) + M3 双协议实测探针 + 官方 Interleaved Thinking 文档
- 最深根因=用法错:M3 是 agentic SOTA 却被当一次性 JSON 填空机用 + thinking 剥离 + 历史不留;QC thinking:disabled 是错补丁(该分离+保留)
- 003-U1 杠杆重排:① 用对 M3(U-A Anthropic /v1/messages + U-B 完整 response/thinking 入历史 + U-C agentic 工具循环=接法B 提主路)② 测量/门修(不改 H 门本体)③ 上下文 8/8 driver ④ best-of-N 次要;加第 0 步真基线门(n≥30 + 证伪实验)
- 退路分支/R2/已拍板 #2:ReAct 从 P2 contingency 提为 M3 主路;升强档/Claude premium=退路
- M3 身份确认:真 MiniMax agentic 双协议模型(非 Claude 改名),探针 /v1/messages 返原生 ['thinking','text'] 块

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 01:33:38 +00:00
lili
affb507bc3 docs(.agents): 沉淀 003-U1 e2e 验收门工具化 + 「SAA 路无¥(token≠¥,折¥=F3)」坑
扩 saa-graph-orchestration「真·全图 e2e 测成功率」章一条:SaaFullGraphE2eTest 003-U1 工具化
(n≥10/外部 brief 文件、minSuccessRate 可配硬门默认不设、token 成本会计软警告、模型无关单测),
并记关键坑「SAA 路无 ¥ 数据(SaaGraphDispatcher cost 整段省略,折¥=F3)→ 别接¥门、别造假¥」。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:30:43 -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
zizi
9b280d668e docs(ledger): 002 判收口标记 + U11→003-U5 回填(创始人 2026-06-18)
总账顶栏本轮日志补:plan002 status=completed、真验证并入 003-U4、引擎 U11→003-U5、carry-forward 入 backlog(3bf6deb7)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:15:02 +00:00
zizi
3bf6deb70a docs(plan): 002 判收口完成 + U11 引擎收尾移入 003-U5(创始人 2026-06-18)
- 002: status=completed;U1-U10+P-OPN-08 已交付(后端 447 测试绿+各单元 codex 评审;前端 build 绿+mock),真验证并入 003-U4;加收口横幅
- U11 引擎资产渲染(六类资产 ref→draw + asset 孤儿 GAMEDEF_KEYS + 4 短板)移出 002 → 003-U5:与 003-U1 共改 gd-runtime/build-from-source,归生成运行时串行序列(双评审 P0-2)
- 003-U5 含评审修订:验收门改可断言(九门测不到资产→build 单测+截图比对+端到端孤儿闭合)、闭合 U6 素材 ref 消费链(P2-2)
- 003: 刷新过期"零行已建"状态表→001 已合 dev/2.0.0(39c16630)+时点纠正横幅;003-U4 前置补 003-U5
- carry-forward: P-ACC-03 feed 卡 ageRating / P-CRT-12 进度展示 → backlog
- 评审 provenance: U11 内容本次 Opus 评审 P0-2 已专门分析并建议本 relocation

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:59:04 +00:00
lili
ceafedfed3 docs(.agents,mvp): plan002 收口续——进度总账回填(U8/U9/U10前端 + P-OPN-08公开API) + @PermitAll公开读纪律蒸馏(P-OPN-08实证)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 14:33:42 -07:00
lili
8238bf2d7a merge(P-OPN-08): 创作者公开聚合API(project+telemetry @PermitAll·仅status==4·无PII·评审SHIP 0P0/0P1+P2软降级整改) → dev/2.0.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:56:46 -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
1ebedf2939 merge(002-U9): studio前端 素材中心/玩法模板中心/创作者公开主页(public) + P-ACC-03徽标(build绿;feed卡ageRating gap已记) → dev/2.0.0 2026-06-18 13:45:09 -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
2eb507da4a feat(studio): U9 素材中心/玩法模板中心/创作者公开主页 + P-ACC-03适龄徽标
3 new pages(view→store→api→request CommonResult 范式,全 mock 兜底):
- 素材中心 /studio/material:六类浏览(GET /app-api/studio/asset/browse)+ 上传
  (POST /infra/file/upload→POST /app-api/studio/asset)+ 选用入草稿
  (POST /app-api/studio/asset/select)
- 玩法模板中心 /studio/template:GET /app-api/studio/template/list(5 品类
  business-sim/narrative/puzzle/trpg/heritage)+ 一键去创作
- 创作者公开主页 /creator/:creatorId(PUBLIC 非 requiresAuth,P-OPN-08):
  GET /app-api/project/public/creator/{id}(仅 status==4)+
  GET /app-api/telemetry/public/creator/{id}/summary

P-ACC-03 适龄徽标 AgeRatingBadge(4 级 all/8+/12+/16+)渲染于:项目详情/我的项目
列表/创作者主页(VO ageRating)+ 试玩页(compliance/rating/get 回读)。
gap:feed 卡 VO 无 ageRating 字段(不杜撰,待 feed.yaml additive);profile/account
页无单局分级数据源——均显式留空。

HJ-FE-DS-001 token/组件复用 + i18n zh/en + 移动优先;strict TS 无 any;
新增 mock studio.ts(注册 index.ts,/infra 前缀放行)。
gate:npm run build(vue-tsc -b && vite build)GREEN;preview+curl 6 端点
+ 3 路由 200 实证。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:40:14 -07:00
lili
da5ec28c49 merge(002-U10): admin运营台接线(限曝光/导出/经营看板/赋余额订阅·funds-safe bizNo幂等+二次确认;build绿) → dev/2.0.0 2026-06-18 13:15:12 -07:00
lili
6771229921 merge(002-U8): 创作可用性前端(P-CRT-10引导/11示例库/13就地失败可重试+mock失败注入;build绿) → dev/2.0.0 2026-06-18 13:15:12 -07:00
lili
7219b613f9 feat(admin): U10 限曝光/导出/经营看板/赋余额订阅 运营台接线
新增 3 个 wanxiang 运营页 + 营收报表导出按钮,全部接 dev/2.0.0 真实 admin-api,mock 兜底齐备:
- 限曝光控制(exposureLimit): POST /feed/exposure-limit + 复用 featured/page 列表 + featured/export-excel 导出;perm feed:featured:update / feed:featured:export
- 经营看板(operationDashboard): GET /telemetry/dashboard 跨模块聚合(DAU/GMV/生成量/发布量) + 区间选择 + 指标卡 + dashboard/export-excel;perm telemetry:dashboard:query(区别于按游戏维度的 dashboard 页)
- 赋余额/订阅(grant): POST /trade/account/grant + /trade/subscription/grant 2-Tab;资金操作=二次确认 + bizNo 幂等键(自动生成可改) + 元↔分换算;perm trade:account:grant / trade:subscription:grant
- 提现页平台营收 Tab 追加 GET /trade/report/revenue/export-excel 导出;perm trade:report:export

接线对齐后端 ReqVO 实证(GrantBalanceReqVO/GrantSubscriptionReqVO/ExposureLimitReqVO):
bizNo @NotEmpty max64、amount 分>0、plan 1月/2季/3年、durationDays>0、exposureLimit Float>=0(>=9999 硬剔除)。
路由注册 remaining.ts wanxiang.children(5→8),菜单继承 route meta;导出走 request.download(blob)+download.excel。

gate: vite build --mode prod GREEN(3 新页+新端点均编入 bundle 实证)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:11:57 -07:00
lili
50a089170d feat(studio): U8 创作可用性 P-CRT-10引导/11示例/13就地失败可重试 + mock失败路径
- P-CRT-10 创作引导: 创作页新手引导卡(三步, 可收起) + Prompt 输入近场写法提示;
  示例库按钮始终可用(未选模板回落通用示例 genericExample); 升级中空态补「一句话造游戏」引导+示例预告
- P-CRT-11 示例库: Create.vue 消费真实 TemplateRespVO.examplePrompt, 强化「示例库」语义;
  mock TEMPLATES 对齐真实后端 U7 五品类(business-sim/narrative/puzzle/trpg/heritage)逐字段同源
- P-CRT-13 就地失败可重试: Task.vue 监听 failed/timed_out 终态就地 showToast(一次, taskId 幂等去重),
  区分 status=4 超时与 status=3 失败文案; 终态失败为 CommonResult code:0 不触发拦截器网络错误 Toast(单 Toast 不重复);
  mock 失败注入: Prompt 含 test_fail→终态 failed(llm_error), test_timeout→终态 timed_out(timeout), 重试不继承失败(失败→重试→成功)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:10:29 -07:00
lili
9b96433bc2 merge(plan002): Tier-1 广度后端 U1-U7 收口(本会话 U3/U5/U6/U7 + 评审整改 + U6 media裁定对齐 + 外部IO不入事务红线蒸馏;447 测试绿) → dev/2.0.0 2026-06-18 12:51:23 -07:00
zizi
41a9d1f52a docs: U5(ReAct)移出 001 → P2 agent-native 轨(创始人定)—— 001=U1-U4 / 003 退路作 contingency / 归 agentic canonical
创始人 2026-06-18:延期任务(U5 ReAct)不再算 001。① 001 plan 删 U5 单元(=U1-U4,已合)+执行状态/需求追溯标移出;② U5 归 docs/agent-specs/agentic编排-SAA.md(P2/Phase-1.5 agent-native 轨,已含接法B);③ 003 退路:ReAct 从'主杠杆'降为 contingency(P2 轨),达标主杠杆改 = 升档+prompt/gatespec修(remaining语义/asset/c4),升档+修不达80%才升级ReAct。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 19:44:36 +00: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
4ca5263eb0 docs(.agents,mvp): plan002 Tier-1 收口——外部IO不入事务红线泛化(U3/U6实证) + 进度总账回填(U3社区/U5admin/U6素材/U7模板)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:51:50 -07:00
lili
72eebdd5bc merge(tier1): U7 R-TPL 品类玩法模板注册(5品类·constants-only·克隆generic代码生成契约) 2026-06-18 11:46:51 -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
5c415cdb21 merge(tier1): U6 R-MAT 素材后端(实体六类/浏览/选用/上传 compose infra FileApi + codex整改) 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
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
3f35acb4d3 feat(community): U3 R-SOC 评论/关注/排行ZSET/弹幕WS
社区社交后端四子能力(game-module-community),克隆通知底座/feed互动幂等范式:

- 评论 Comments:CRUD + 举报转 compliance。删除按 userId 归属强校验(防越权删他人评论),
  举报落本端举报态幂等 + 事务提交后 afterCommit 接缝(compliance 无受理 -api,留桩 OPEN ITEM)。
- 关注 Follow:active 软开关幂等切换(不删行,范本=feed FeedInteractLog),不能关注自己,
  并发双插由 DB 唯一键 DuplicateKeyException CAS 收敛;粉丝数/关注数 countActive。
- 排行 Ranking:Redis ZSET + ZSET↔DB 一致性窗口。DB=真相、ZSET=缓存索引:
  写穿透双写(DB 原子累加 + ZSET incrementScore)、ZSET 缺失/启动从 DB 回填重建、最终一致;
  维度白名单 RankDimensionEnum(game_hot/creator_hot)。
- 弹幕 Danmaku:WebSocket 单机最小实(LocalWebSocketMessageSender),自维护房间 gameId→sessionId
  注册表做房间维度广播(框架仅按用户维度推送),断连懒清理;多实例需切 sender-type=redis(MQ future-state 未部署)。

契约/库表:
- Flyway V23.0.0(U3 独占 V23.x):game_community_comment/follow/rank/danmaku 四表 +
  幂等唯一键(follow uk(user_id,target_user_id,deleted,tenant_id)、rank uk(dimension,target_id,...)),
  同步 huijing-server/db/migration + contracts/db-schemas。
- community.yaml additive 加 8 个 app 端点 + 5 个 schema(既有冻结)。
- 错误码段 1-107-004 评论 / 005 关注 / 006 排行 / 007 弹幕。

验证:mvn -pl game-module-community/game-module-community-server -am test -o 全绿
(57 tests:新增 U3 35 + 既有 22;CommentService 9 / FollowService 8 / RankService 8 / Danmaku 10)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:01:24 -07:00
lili
09ced58930 feat(studio): U6 R-MAT 素材实体/浏览/选用/上传(compose infra FileApi)
R-MAT 创作者私有素材库(六类 sprite/character/effect/scene/ui/music,冻结同枚举):
- StudioMaterialDO + game_material 表(V24.0.0,归属 creator_user_id,idx_owner_cat)
- 3 端点 /app-api/studio/asset/{upload,browse,select}(studio 领域端点,需登录用户)
- upload:六类校验 + 大小≤10MB + 每类目 MIME 白名单 → composes huijing-module-infra
  FileApi.createFile 存字节 → provider 包装 ref → 落库 → 返回冻结 StudioAssetContextItem
- browse:owner-isolated 分页(强制 eq creator_user_id),可选 category 过滤
- select-into-draft:把本人素材 ref 写入草稿会话 assetContext(JsonUtils 序列化,按 ref 去重合并)
- MaterialProvider SPI + 工厂 + mmx-cli mock(graceful degrade,仿 AdProviderFactory)
- 错误码段 1-112-005-***(七个);studio.yaml 加 3 端点 + schemas(additive)

验证:mvn -pl game-module-studio-server,-api -am test 全绿
(StudioMaterialServiceImplTest 17/17,studio 模块 61/61)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:54:56 -07:00
zizi
c290fd1be3 docs(plan): 001 评审 follow-up + media 裁定——asset孤儿→002-U11 · remaining语义/assertAfterPlay/9-9/worker→003-U1 · 上传归属=media
我的 001-U1~U4 codex+opus 评审(迟到于另一 session 的 FIX-FIRST 合并,但有料)落账:① 002-U6 上传端点=共享 media(创始人裁);② 002-U11 补 gamedef 路 asset 孤儿(GAMEDEF_KEYS strip assets + asset 节点 validate 后 merge=死代码,必修);③ 003-U1 评审更新:gamedef 已绕开命门(c1 对目标路 moot)→ 新焦点 remaining=alive.length 语义错位/assertAfterPlay 词汇门禁(c4)/9-9=金样非模型过门/worker prompt 切默认前补 GAMEDEF_SYSTEM。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 17:09:01 +00:00
zizi
c499d9c181 docs(总账): §7.1 Tier-0 标现状——SAA gameDefinition U1-U4 已集成 dev/2.0.0 + U5 延期 + 下一关 cutover 门
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:55:28 +00:00
zizi
4d48c0b497 docs(skills): drive-remote-claude-tmux 补 §7 实战限制——直驱活会话撞两墙(guard拦注入/模态吃键),记行得通三条路
本会话直驱 game 实证:auto-mode classifier 在执行层拦活会话 send-keys(口头授权不够·要设置层 Bash 权限规则)+ 'How is Claude' 反馈模态截获所有非选项键(Escape/C-u/BSpace 全失效)。行得通=创始人粘路径(本会话成功)/专用全新会话/直驱需权限规则+先关模态。铁律=完成判据靠 git push 非读屏。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:53:55 +00:00
zizi
e378f3c662 contract(source-project): kind 枚举补 clickable(6c6g 评审待办#1·additive)
clickable = U1 引入的声明式点击基元;原靠 additionalProperties:true 宽松放行(功能可用),此补正把它登记为一等 kind。additionalProperties 维持不变(收紧是独立设计决策,本次只做 additive)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:47:16 +00:00
zizi
39c16630ed merge(saa): 真结构化生成地基 feat→dev/2.0.0——U1-U4(运行时约定/build-from-source/真产gameDefinition/多模型回退)+6c6g评审整改(P1 K_STATUS清零/P2 fallback注释);flag默认factory灰度opt-in,生产零行为变更 2026-06-18 16:46:19 +00:00