lili
|
c6d6d39a2a
|
feat(cfg): W-CFG-KB K3 知识包治理接线——knowledge 配置块+激活发布 Nacos+worker 订阅热物化(复用阶段二三·默认关)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
把切片一知识件外置接进受治理配置集,一条「改知识件→定版→激活→worker 物化生效」链,复用配置控制面阶段二/三治理机器零重造:
game-cloud:knowledge 作 content_json 第四内容块(仿 readiness),与 routeA/routeB/readiness 互斥、sanity(packageId/
activeVersion 非空);走向相反=真下发(readiness 进程内空载荷,knowledge 跨进程),激活编成一条路 B 载荷
{knowledge.packageId,knowledge.activeVersion}、经 KNOWLEDGE 档独立 dataId gen-hot-params-knowledge publish 给 worker;
pathA=null→dispatch/reconcile 只走路 B、激活编排一行未改。加 AigcConfigTierEnum.KNOWLEDGE+KnowledgeConfigKeys+NO_ROUTE 文案。
worker:kb_store 加进程级激活版本源槽+attach/detach(对称 genconfig),resolve_active_version 取值链改为治理源(Nacos)>
env 钉版>最新 committed;新 kb_nacos.py(KbActiveVersionSource 订阅 dataId、按 packageId 匹配、激活变更即重物化)+
setup_knowledge_activation() 启动物化+(Nacos 启用时)attach,cheap_service_app 紧接 genconfig 热源挂它。复用 genconfig_nacos 启用旗+代理旁路。
默认关字节不变(TIER2_KB_ROOT 未配→不物化不订阅、read_file 回落仓根;无源→resolve 回落 env/最新);缺文件显式失败沿用
(materialize_active 照抛保留 kb_root、kb_nacos 只在 best-effort 边界接住不咬生成);全 best-effort。admin 本轮做前端契约点
sanity.ts,富编辑视图=紧接下一片(与 readiness 一致)。
主控终审:git 完整(HEAD 未动·无破坏操作)+11 文件精确+读码坐实互斥/routeB载荷/取值链/best-effort/默认关/缺文件失败没削弱
+亲跑 Java codec 34+activation 21(BUILD SUCCESS)+Python test_kb_externalize 21 全绿。真 Nacos 激活端到端排窗口。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-05 22:50:10 -07:00 |
|
lili
|
7e21b331a5
|
feat(aigc): 面五 game-cloud 生成业务埋点 GenMetrics(观测阶段四·flag 默认关)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
新增 GenMetrics 组件(@ConditionalOnProperty huijing.aigc.metrics.enabled,默认关=零装配零副作用),
把 MVP 要盯的生成指标以 micrometer 暴露给已活的 /actuator/prometheus:
- gen_task_total{status} Counter:终态计成功率(succeeded/failed/timed_out,超时据真实 failureReason 还原)
- gen_queue_depth Gauge:@Scheduled 定时刷 countGlobalInflight→内存 AtomicInteger,scrape 零 DB(勿全表重查)
- gen_gate_fail_total{gate} Counter:九门逐门失败,源 trace.sevenGateVerdict.guards(复用 ReadinessScorer.guardPass:H_progress 嵌套取 .pass)
- gen_duration_seconds Timer(直方图):源 trace.wallS
- llm_cost DistributionSummary:源 trace.cost.totalRmb(worker token×倍率自估值、非 new-api 权威计费)
埋点挂 DifyCallbackServiceImpl.postCommitBestEffort(post-commit best-effort、realSuccess 判定前、
覆盖成功/失败/超时三类终态),null 判空 + 内部吞异常双保险,绝不进 DifyCallbackTxService 事务方法、
不咬回调主链(§8 旁路铁律)。micrometer-core 经 spring-ai-commons 传递,无需改 pom。
GenMetricsTest 7 例(终态三标签/耗时成本/逐门guards嵌套裸/队列gauge/脏trace吞/开关装配三态/抛错不咬主链)
+ 主链回归 DifyCallbackServiceImplTest 20 + DifyCallbackTxTraceTest 6,主控亲跑 BUILD SUCCESS 全绿。
面一 actuator 已活;dev 重部署后 profile 开 flag 即出指标(下一窗口深冒烟真验)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-05 19:23:20 -07:00 |
|
lili
|
8724501f32
|
feat(aigc): D11 质量评分参数外置进配置集(W-CFG-EXT E1-E3)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
背景/目的:D11 就绪评分的四维权重与效率预算阈值原本硬编码在 ReadinessScorer
里,放量校准要改代码换 jar;本提交把它们收进阶段二配置集治理,改一版即生效、可
回滚、可归因(SoT §10「校准走配置、不在现场拍脑袋」的配置载体,不改任何命题)。
范围/做法(E1-E3):
- E1 content_json 加第三块 readiness(十字段,值=ReadinessScorer 常量)+ 档位枚举
加跨档特例值 READINESS(无 Nacos dataId、进程内消费);codec 加 readiness 值域
sanity(四维权重和≈1.0±0.001/各∈[0,1]/预算>0/repairs_good≤ok/子项分∈[0,1])
与 routeA/routeB 互斥;NO_ROUTE 判据扩为 !hasA&&!hasB&&!hasReadiness(空串/{}
仍红)。
- E2 新 ReadinessConfigProvider(读激活版 readiness、短 TTL 缓存、逐字段回落、读失
败不抛)+ GenConfigService.getActiveVersionBySetKey(按 uk_set_key 定位、读不到返
null);ReadinessScorer 从 provider 取权重阈值、硬编码常量降为回落默认(一个不删)
、@Autowired(required=false) 可选注入不破坏既有 new ReadinessScorer() 单测;顺修
:19/:151 陈旧「预算<=0.15」注释(实际 0.6)。
- E3 激活编排一行不改:readiness-only 经 codec 产空载荷,现有 dispatch/reconcile
在空载荷下天然短路成「值域 sanity + 账本收口、无投影、恒一致」。
建模:按计划倾向用枚举值 READINESS(§7 待拍点,创始人未明拍,可 revise 为与 tier
正交的 kind 维度)。契约先落(content_json.readiness schema/javadoc、
AigcConfigTierEnum、GenConfigService 接口、NO_ROUTE 错误码文案)再改实现。
验证:整 game-module-aigc-server 单测 385/0/0(7 skipped=需真基建 RealIT);api
经 -am 从源码重建绿;既有反射测试(CheapWorkerResultOutContractTest)与 score==95
锚点(SaaGraphDispatcherTraceTest)未破坏。真 Spring 上下文 wiring + 真后端 e2e
排部署窗口。
边界:W-CFG-KB(知识件外置)不在本提交(gated 别的依赖);admin 端 readiness 数字
字段编辑表单为 follow-up(本提交只做后端)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-05 18:11:20 -07:00 |
|
lili
|
79264197ae
|
feat(aigc-admin): 配置控制面阶段三 game-admin 配置控制台 UI(14端点封装+列表/详情三区/版本diff/漂移对账+aigc:config五权限菜单种子)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
消费阶段二已落的 AdminGenConfigController(/admin-api/aigc/config 十四端点),把受治理生成配置变得可视可操作、有权限边界;不改一行后端契约。
- api/aigc/config/index.ts:14 端点封装 + VO 逐字对齐 TS 类型;三个 @RequestParam POST(archive/recover-activating/rebroadcast)走 params 位防真机 400;全走标准 CommonResult request(排除 genMonitor 裸 axios 范式)
- views/wanxiang/config:配置集列表+新建+归档;详情抽屉三区——草稿编辑(prompt 大文本域 + JsonEditor code 模式,解析→改叶子→原样回序列化保 routeA/routeB 信封 round-trip + routeA sanity 前端预校验)/ 版本历史+全量查看+与上一版 diff / 激活·回滚·恢复卡激活+漂移对账三态+一键重推;写按钮全 v-hasPermi 收敛(save/freeze/archive/activate)
- game-module-aigc/sql/aigc_config_menu.sql:自建父菜单(id 7120,component=wanxiang/config/index)+ 5 权限点(7121-7125:query/save/archive/freeze/activate)INSERT IGNORE 幂等,id 段避撞 biz(7100-07)/trade(7110-12)
- 契约核实:状态枚举实为 AigcConfigStatusEnum 五态(补工单漏的 ACTIVATING=15)/ verdict 五态 / changeType 三态逐字对源;version/get 参数是 versionId、version/diff 参数是 versionAId+versionBId
- 验收:vite build 绿(exit 0)+ eslint 干净(exit 0)+ vue-tsc 我方文件零类型错误(总数持平基线 55,均上游 yudao);真后端 e2e 走查待 staging 部署窗口(诚实口径:本地只到 build 绿)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-05 00:03:13 -07:00 |
|
lili
|
167cedde15
|
fix(aigc-test): 修两条既存测试债——控制平面测补 MQ producer @Mock + schema 校验测夹具自包含化
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
条1 AigcControlPlaneTest(原 6 err):AigcTaskServiceImpl 接 RocketMQ(T-AGC-07)后新增
genTaskProducerProvider 软注入字段,本纯 Mockito 测未声明对应 @Mock → @InjectMocks 留 null →
成功入队路径(insert 后 getIfAvailable() 发 MQ 信号)6 例 NPE。补 @Mock provider(字段名同源
按名消歧)+ setUp 桩 getIfAvailable()→null(走生产「producer 缺席→跳过投递、任务留 queued」
软兜底;本测只断 insert 落库、不断 MQ 投递)。
条2 GameConfigSchemaValidatorTest(藏红/陈旧 target 假绿):accepted-configs.json 夹具由 pom
copy-wanxiang-test-fixtures 从 docs/agent-specs/2026-06-09-generation-spike 拷入,该源目录已随
史料档清理删除(6d2f8789)→ 干净构建拷空、夹具缺失、assertNotNull 红,仅靠上次构建残留 target/
陈旧副本假绿。修=从 git 史(6d2f8789^)捞回 6 条 clicker accepted 配置、落一等 test 资源
src/test/resources/wanxiang-test-fixtures/accepted-configs.json(普通 test 资源自动进 classpath)、
删已破 pom 执行段(另一拷 contracts 的执行段不动)。
验证(干净 mvn clean test 清陈旧 target/):两目标类 27/0/0;整个 aigc-server 模块套 363/0/0
Skipped 7(基础设施门测),BUILD SUCCESS,零回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-04 21:38:35 -07:00 |
|
lili
|
c3f9c26bf9
|
feat(aigc)+docs: 决策5「按推荐」落 BUDGET_RMB 0.15→¥0.6(D11 效率维纠错配,待外置)+ 决策6「进配置集」裁定入档 + 板追加四增量(W-CFG-EXT D11 外置/W-CFG-KB 知识件入集/阶段四 reframe 全链路 OTel-Prom-Grafana/W-ASSET 资产管理待 scope)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 21:05:18 -07:00 |
|
lili
|
22444fd5e8
|
fix(cfg): 路A PATCH /session→/sessions 复数(AgentScope 2.0.2 router prefix=/sessions,单数对真 Service 必 404;D 波对账读发现、fable 复核框架源码+bootstrap.py 双证后修;含测试断言与 javadoc 三处;受影响 43 测复跑绿)
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 11:27:24 -07:00 |
|
lili
|
a0f1306754
|
feat(config): 配置漂移对账 + 一键重推 + 失败兜底(阶段二/步骤5)
只读对账 GenConfigReconcileService:拉两路投影比对当前激活版,产结构化漂移报告(路/键/期望/实际)。
严格分三种非漂移态不误报:①ACTIVATING 激活中间态跳过②Service/Nacos 不可达报不可达非漂移(不抛)③路B读用轮询容忍窗吸收 Nacos 最终一致延迟。
路A只读投影:AgentServicePatchClient 补 probeAgentSystemPrompt/probeSessionModelConfig,走真实 AgentScope 列表端点(无单 GET;/agent/ 按 id 过滤取 system_prompt、/sessions/?agent_id= 复数按 session.id 取 chat_model_config)。
路B只读投影:NacosConfigPublishClient 补 probeDataId 三态(登录成败作可达性探针,区分不可达/缺失/在)。
一键重推 rebroadcastActive:复用 C 波私有 dispatch 按当前激活版重放双路下发,指针本就 ACTIVE 保持不动(不落 ACTIVATING/不写账本/不补偿),幂等,某路失败可重试。
Controller 加对账端点(query 权限)+ 重推端点(activate 权限)+ @ApiAccessLog。不加表(读时比对)。
Service 启动自愈不做,对账报告显式标注"投影缺失"为后续增强位(设计 §6)。
验证:模块单测全量 342 绿(排除既存两坏类 AigcControlPlaneTest/GameConfigSchemaValidatorTest=已知债);
对账判定矩阵 12 用例绿;重推 5 用例绿;路A/路B 投影探测解析 11 用例绿;
路B 真 Nacos e2e 全链绿(重推→对账IN_SYNC→篡改→对账DRIFT检出→重推→收敛IN_SYNC→清理,演示 dataId gen-hot-params-e2e-recon-cheap 测完删除);单体在线编译 BUILD SUCCESS。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 11:22:22 -07:00 |
|
lili
|
6720424eb7
|
feat(aigc): 配置控制面阶段二 步骤3 双路激活编排(值域sanity前置/路A PATCH+路B publish/失败补偿回上一激活版/ACTIVATING持久态恢复/回滚复用) (配置控制面阶段二 步骤3)
把生成配置版本升级为「值域校验 → 双路下发 → 账本收口」的可幂等、失败可补偿动作(设计 §3.3/§3.6):
- 编排 GenConfigActivationService:sanity前置(非法即拒不发不写账本)→ beginActivating落ACTIVATING+在途目标 →
路A PATCH /agent+/session(完整chat_model_config整替)、路B publish 按档隔离生效dataId → 全成功收口(前移指针+清在途)/
某路失败即整批判未生效+立即补偿重推已下发成功路回上一激活版+复位回上一态+可重试(指针不前移);路A败则路B不发;
投影全成功但账本提交失败留ACTIVATING由recoverActivating幂等重放向前执行到底;回滚=对历史版重放同一编排。
- 账本原语落GenConfigServiceImpl(配置治理表唯一主人):beginActivating/markVersionActivated(扩展清activating指针)/
abortActivating,经LambdaUpdateWrapper显式SET把BIGINT NULL指针写回NULL(updateById跳null做不到);状态机加ACTIVATING(15)+边。
- 外呼:GenConfigHttpClient(NO_PROXY JDK HttpClient任意方法+头+体,内网直连绕fake-ip代理);AgentServicePatchClient(路A,
X-User-ID鉴权头/按档路由/两次PATCH都成功才算成功);NacosConfigPublishClient(路B,Nacos HTTP OpenAPI登录→publish/read/remove,
与SCA客户端不冲突);口令走env占位符(AigcConfigActivationProperties,严禁明文入代码);地址可配置(不写死live端口)。
- content_json契约=Service-shaped透传(routeA→/agent+/session snake_case、routeB→area.key扁平),system_prompt取版本行prompt正文。
- Controller暴露 activate/rollback/recover-activating(权限aigc:config:activate + @ApiAccessLog操作日志)。
- V30迁移加 activating_version_id 列(承在途激活目标,供§3.6b幂等恢复对齐)。
验证(全真跑):配置子域76单测绿(sanity矩阵19+失败路矩阵14+账本25+两路客户端12+状态机4+权限门2);全模块310单测绿(排除2既有坏类
AigcControlPlaneTest/GameConfigSchemaValidatorTest,基线e5439c74同样失败,与本改动无关);真库IT 3绿(V1..V30 replay+ACTIVATING生命周期
NULL-clearing真库验);路B真Nacos e2e绿(生产客户端publish→读回→改→读回→删,演示dataId gen-hot-params-e2e-demo,轮询最终一致;
跨语言:Java publish→Python worker genconfig按area.key读回33.0→清理,生产dataId cheap/tier2从未碰=404);huijing-server -am编译绿。
路A真Service PATCH排部署窗口(本机cheap-worker/.venv缺redis/apscheduler起不了Service,不碰mini-desktop live 8300),请求形态经读
AgentScope 2.0.2真源(UpdateAgentRequest/UpdateSessionRequest/ChatModelConfig四字段)+桩测试双验。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 10:37:24 -07:00 |
|
lili
|
790f53dc71
|
feat(aigc): 配置控制面阶段二 步骤1+2 生成配置治理子域(配置集建模+yudao治理骨架 / 版本行与历史 MySQL) (配置控制面阶段二 步骤1+2)
在 game-module-aigc 落生成配置治理子域,把散落的生成配置旋钮升级为「可版本、可回滚、可归因」的受治理
资产。治理单元=配置集(不塞 infra_config KV),走「改→定版→审核挂点→激活→回滚」生命周期(设计 §3.2)。
版本账本落 MySQL 版本行(prompt 存 MEDIUMTEXT、不进 Nacos):设计 §3.1 三约束——prompt 越 Nacos 100KB
上限 / 定版要原子(元数据+全量内容同库同事务一行) / diff 与检索要就地。
数据模型(V29,现行最大 V28→取 V29,replay 全绿):
- game_aigc_config_set:配置集(tier cheap/tier2 + set_key uk + 生命周期 status + 草稿工作副本 draft_prompt/
draft_content_json + active_version_id 当前激活版指针[只由激活前移、定版不动])。
- game_aigc_config_version:版本行(全量快照,只增不删;prompt MEDIUMTEXT + content_json + content_hash +
content_bytes[utf8mb4 字节数,按字节非字符] + uk_set_version 同集版本号唯一)。
能力面(admin,@PreAuthorize 权限门):建/改配置集(save)、定版(freeze,单库事务快照草稿→版本行、状态转待审、
不动激活指针)、历史列表/任一版取回/两版 diff(query,应用层拍平点路径逐项增删改)、归档(archive)。
状态机 AigcConfigStatusEnum 单点裁决合法流转。错误码续编 aigc 004 子段(不跳段)。
步骤3 接缝(非孤儿):激活的双路下发编排(值域校验 + PATCH /agent+/session + publish Nacos)属步骤3、本波不做;
激活的账本收口 GenConfigService#markVersionActivated(状态转 ACTIVE + 指针前移,纯 MySQL)已就位并单测,
步骤3 在双路下发成功后调它、失败不调(指针不前移、保留上一激活版为账本权威,设计 §3.6);controller 不暴露激活端点。
验证:aigc-server 单测绿(状态机流转 §3.2 / 权限门反射 / 定版事务 / content_bytes 字节口径 / diff;新增 26 测,
既有全不变);真 MySQL IT 绿(mini-infra 100.64.0.8,绕系统代理直连)——① V1..V29 全量迁移按版本序真库全应用
(replay 全绿,多语句交服务端解析,正确处理 V1 注释内分号)② 30KB/64KB 边界 prompt 无截断(证 MEDIUMTEXT 非 TEXT)
+ utf8mb4 字节口径(含中文/emoji round-trip、LENGTH>CHAR_LENGTH)+ uk_set_version 幂等;单体 huijing-server 编译绿。
范围说明:契约仅动 game-cloud;近期迁移 V26/V27/V28 均只在 db/migration(contracts/db-schemas 镜像自 V25 起已停维护,
R2 charge 亦未动 contracts),故 V29 循此现行先例、不动 contracts;新 admin 治理 API 未入 aigc.yaml 契约,与 R2 同——
待 fable 终审裁定是否补契约。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-04 09:32:21 -07:00 |
|
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
|
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
|
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 |
|
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 |
|
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
|
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
|
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
|
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
|
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 |
|