zizi
ffd22f22c2
feat(tier2): C1 trace 中间件接 with_studio(开 Studio 即旁路推 OTLP span)
...
C1 此前建了 observability.with_studio + studio_sink(OTLP→Studio),但没 wire 进真正跑的
Tier2TraceMiddleware(它在 worker/middleware.py、C1 没动)。本提交把中间件新建 adapter 的路径从
TraceAdapter(...) 换成 with_studio(...):drop-in——TIER2_STUDIO_URL/infra_config[studio] 取不到时
studio sink 自动 no-op,行为与原 TraceAdapter 完全一致(CLI/服务两线不开 Studio 即无感);取到地址则
每步在原 sink 外旁路推一份 OTLP span 给 AgentScope Studio(observe-only,best-effort,不阻塞主链)。
存 _studio_sink 句柄供收口 flush。配合 mini-desktop 起 Studio(创始人:now)即得真跑可视化。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:49:03 +00:00
zizi
b1217301c8
feat(tier2): C1 轻量观测——控制面把 SSE 事件记成每局可读 trace
...
C1 观测的轻量兑现(创始人:没有完整的 C,B 迭代很慢)。不起 Node Studio(它在 6c6g 非 mini-desktop、
是 Node monorepo,重)——而是在控制面客户端侧顺手把逐帧消费的 SSE 结构性事件(跳过 *_DELTA 逐 token 噪声)
记成 per-run JSONL 时间线:模型调用/工具调用(带工具名)/工具结果/推理/reply 边界/卡死信号
(REQUIRE_USER_CONFIRM/REQUIRE_EXTERNAL_EXECUTION)。落工程 workdir/control-plane-trace.jsonl,跨 attempt
追加=整局多轮时间线。零服务改动、零 Studio 依赖、best-effort(写失败只告警不中断)。
迭代时一眼看清「agent 调了哪些工具、按什么序、卡在哪」——这正是这轮 debug 反复要的可见性。
observability/studio_sink.py 的 OTLP/Studio 全量 UI 路仍在、是将来可选(待 mini-desktop 起 Studio)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:01:06 +00:00
zizi
34336d3204
feat(tier2): C3 证路基线接 deepseek-v4-pro 跨族 cross-check(创始人 2026-06-24 裁定)
...
网关现实(实测):new-api 只有 MiniMax + deepseek-v4-pro,无 Opus/Fable/Claude/GPT;
build_baseline_model('Opus') 真调返 503 model_not_found。创始人裁定证路当前用 deepseek-v4-pro
跨族 cross-check(不比 M3 明显强、证路力偏弱,但能跑;真强模型证路待网关开 Opus/Fable 渠道、
改 generation.yaml 即接,代码已就绪)。
加 BASELINE_CROSSCHECK + _BASELINE_NAME_BY_KEY 的 crosscheck/deepseek 聚合 key + generation.yaml
model.baseline_crosscheck=deepseek-v4-pro。实测 deepseek-v4-pro 在 new-api 上 Anthropic 原生路可用,
build_baseline_model('deepseek-v4-pro') 真调返「跨族已通」——证路走 Anthropic 路与 M3 同协议同线对照。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 10:56:55 +00:00
zizi
d0b30ddace
feat(tier2): 设计阶段接进服务路径(修服务态不收敛根因)
...
006 真跑实证:服务态 writer 拿空 design_text → 富游戏三门(tripleLink/economy/latch)全挂、
4 次 resume 不收敛(产物结构合法能渲染,但三系统联动没接对)。CLI 线 run_studio 先跑工作室设计
阶段再写、故更易过门;服务路径此前整段跳过设计(app.py 文件头标的 followup)。
修:bootstrap 加 _run_design_phase——在控制面进程内(有 agentscope+模型)复用 studio._design_stage
(工作室星形多 agent 团队 + 失败 degrade 回单 agent)产出 design_text,喂进 AgentRecord.system_prompt
(roles.writer_system 第二参)。每局建 agent 时跑一次,不随 resume 重跑。best-effort:设计失败返 ""
不阻断生成。do_design 经 drive_generation 透传(control_plane --no-design 可关,对照用)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 10:53:38 +00:00
zizi
34b9ce3be0
fix(tier2): BYPASS PATCH 须带 query agent_id(修 422 missing agent_id)
...
上一修的 PATCH /sessions/{id} 设 BYPASS 返 422:missing query agent_id——该端点与 SSE stream
一样要 query 参数 agent_id。修:_patch 支持 params,_set_permission_bypass 把 agent_id 作 query 传。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:55:51 +00:00
zizi
9630c1ece7
fix(tier2): 服务态会话设 BYPASS 权限(修工具调用卡死 ASK)
...
toolkit 抠取修好后,agent 能调工具了,但每个 chat run 抛「Agent is waiting for 1 tool calls...
but received no event」(agent/_agent.py:931):tier2 九工具默认 check_permissions 返回 ASK
(_adapters.py:99),服务态无人确认 → 工具调用进 ToolCallState.ASKING 等永不来的确认事件 →
生成零产出(workdir 只有 play-spec.json,九工具一个没执行)。
CLI 线靠 studio.py 的 _bypass_state()(AgentState permission=BYPASS)解决;服务态此前没设。
修:bootstrap 建 session 后 PATCH /sessions/{id} permission_mode=bypass
(app/_router/_session.py:334 更新 AgentState.permission_context.mode;PermissionMode.BYPASS="bypass"),
start_new_game / iterate_existing_project 都设;resume_session 复用同 session 自动继承。加 _patch helper。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:52:29 +00:00
zizi
e06ddc887a
fix(tier2): thinking 关时 budget 归一为 None(修基线模型 Parameters 校验)
...
C3 Opus 基线探针实证:build_baseline_model('Opus') thinking 关时传 thinking_budget=0,被
AnthropicChatModel.Parameters 的 thinking_budget>0 约束拒(ValidationError),基线根本构不出。
C3 代码落地时假设 budget=0 可行,但从没真跑过基线、未暴露。
修 build_model:thinking_enable=False → thinking_budget 归一为 None(Parameters 字段 int|None,
Anthropic 仅 thinking_enable 时才用它)+ 跳过 max_tokens>budget 校验(该约束只在 thinking 开有意义)。
M3 路(thinking 开、budget=8000)行为不变,硬校验保留。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:46:07 +00:00
zizi
01a3229a9e
fix(tier2): 服务态从 Toolkit.tool_groups 抠九工具(修 chat run 起手即崩)
...
B1 控制面真驱 :8200 暴露:每个 chat run 起手即抛 RuntimeError「无法从 Toolkit 抠出
FunctionTool 列表」→ 服务态生成零产出(M3 没写任何文件、SSE 只有心跳、4 次 attempt 全 null
verdict)。P4 只验了服务能启 + BackendStore 往返,从没真跑过一回合 chat,故此 bug 一直潜伏。
根因:_extract_function_tools 按 tools/_tools/function_tools 扁平探测,但 2.0.2 Toolkit 把工具按组
存 self.tool_groups(构造传入的 tools 被包进 "basic" 组,group.tools 是 list[ToolBase];源码
tool/_toolkit.py:127-135 + :515)。修:先从所有 tool_groups 收 .tools(得九个 FunctionTool),
旧扁平探测降为兜底。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 08:39:19 +00:00
zizi
76aab8d703
fix(tier2): bootstrap /chat input.content 须为内容块列表(控制面 smoke 实证)
...
credential/agent/session 已通后,POST /chat/ 返 422:body.input.content「Input should be a
valid list」。根因 = Msg.content 经 REST 传 JSON 必须是内容块列表,而 bootstrap 发了裸字符串
(Python 端 UserMsg(content=str) 的字符串自动包块只在构造器内发生,不经 REST JSON 校验那条)。
修:加 _user_input(text) helper 统一组 input = {name,role,content:[TextBlock]},三处 chat
调用(start_new_game/resume_session/iterate_existing_project)改用它。TextBlock JSON 形状
{type:"text",text:...} 据源码 message/_block.py:11 核实。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 07:57:39 +00:00
zizi
295f232d20
fix(tier2): bootstrap 凭据注册体对齐活服务 schema(控制面 smoke 实证)
...
B1 控制面真驱 :8200 时 POST /credential/ 返 422:Field required body.data。根因 = bootstrap
的 _resolve_m3_credential_payload 发了扁平 {type,base_url,api_key,model},而 create_app 的
CreateCredentialRequest 要 {data: dict}(凭据载荷嵌 data 下),且 model 不是凭据字段。
据活服务 GET /credential/schemas 的 Anthropic schema + 源码 app/_service/_model.py:get_model
(模型类由 CredentialFactory.from_dict(data).get_chat_model_class() 据 data.type 决定)定稿:
data = {type: "anthropic_credential", api_key, base_url};模型名仍在 session.chat_model_config.model。
agent/session/chat 体经源码核对结构一致(CreateAgentRequest/CreateSessionRequest/ChatModelConfig/
ChatRequest),无需改;X-User-Id 头通(返 422 而非 401 证明已过鉴权进 handler)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 07:55:34 +00:00
zizi
bd8b2c80a6
feat(tier2): B门重机器并行落地——控制面有界resume + Studio观测 + MCP工具面 + 基线client/Prompt门
...
B 门(AgentScope 重机器)四单元并行建设,文件不相交,均过 6c6g 静态校验(py_compile +
惰性 import 安全 + 机器门)。真跑收敛/Studio/门验证属 mini-desktop,作为下一步 e2e。
B1 控制面有界 resume(service/control_plane.py · 皇冠):
补上 service/app.py 与 bootstrap.py 文件头标的 followup——CLI run_studio:404-458 的外层有界
resume(M3 看一次 verdict 就停 → 带反馈踹回去续修)此前在服务态(create_app :8200)缺失。
drive_generation() 复用 bootstrap REST 原语 + run 纯代码门:每回合消费 SSE(REPLY_END/
EXCEED_MAX_ITERS)等 chat run 结束 → 独立跑 run.run_gates 机器判门 → 门绿据 on-disk 源工程
重建七要素 + persist 落库 / 否则 verdict_feedback 续修,直到门绿/预算耗尽/熔断。不靠内存
session 判收敛(服务态九工具每回合工厂新建 Tier2Session),贴合「门机器判、控制面绝不自评翻绿」。
C1 AgentScope Studio 观测(observability/studio_sink.py + trace.py):
把统一 trace 事件按 OTLP(经核实 Studio = OpenTelemetry,非私有 REST;HTTP 3000 /v1/traces)
映射成 span 推 Studio,traceId→gen_ai.conversation.id 聚成一条 run。私有 TracerProvider 避免
抢 otel 全局单例。默认关闭(无 TIER2_STUDIO_URL 即 no-op)、observe-only、绝不改 decision。
C2 MCP 工具面(worker/mcp_tools.py + toolkit.py 加性挂点):
图说 E 族——build_toolkit 末尾加配置门控挂点,默认关闭时 build_mcp_clients() 返回 []、
Toolkit(tools, mcps=[]) 与原构造等价,九工具(spike 已验证主链)行为零改。Toolkit 接受 mcps=
形参已对源码核实(tool/_toolkit.py:93)。
C3 基线 client + Prompt 一致性机器门(config.py + genconfig.py + generation.yaml + ci/):
build_baseline_model(Opus 经 new-api Anthropic 原生)供 A 门「证路」,build_model M3 路零回归;
check-prompt-registry.sh 文件级三向一致 + import 级命中 registry,6c6g 实跑 exit 0。
修复 design_team 配置外置兑现(design_team.py):
leader_max_iters/per_expert_cap/timeout_s 改 None→genconfig.get('design_team',...),此前硬编码
默认 240 导致改 generation.yaml 的 timeout 不生效;已验 genconfig 真读到 YAML 值。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 07:46:59 +00:00
zizi
ce491314c8
feat(tier2): P4 服务化核心——Agent Service(create_app)+ 第二装载真落库(MySQL+MinIO)
...
【U1 Agent Service】service/{app,infra_config,bootstrap}.py + config/infra.yaml:
经 agentscope 2.0.2 官方 create_app 把 tier2 引擎接成 Agent Service 壳——复用 studio 的 agent 装配零件
(roles/九工具/四熔断+trace/BYPASS/历史压缩)接到 create_app 扩展点(extra_agent_tools/extra_agent_middlewares),
不重写生成逻辑。Redis(mini-infra)做 storage(db0)+MessageBus(db1)。session 三路(新建/续接/加载工程迭代)经 REST(bootstrap.py)。
诚实差距:有界resume/工作室多agent/L2-L3/落库=循环外编排,服务态由控制面承接(已标 followup)。
【U2 真落库】store.py BackendStore 真实现(替 P3 NotImplementedError)+ schema SQL:
manifest→MySQL(幂等键 game_id+source_hash)+源文件全文→MinIO(bucket tier2-src);fetch 回填重建。
pymysql+minio 惰性 import;TIER2_STORE=backend 切换。
全 tier2/ 内、零碰 Tier0/1、py_compile+惰性import实证+forbidden-import 通过。真部署(连基建+uvicorn+smoke)待 mini-desktop。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 06:37:37 +00:00
zizi
c9dbd50d80
feat(tier2): B门-配置外置——生成器旋钮 + prompt 全部数据驱动(调生成=改数据重跑、不改码)
...
让"调生成"从改代码变成改数据,直接给"优化 20% 过门率"的迭代提速。默认值=现有硬编码值、行为字节不变,改外部数据才生效。
【生成配置层】genconfig.py + tier2/config/generation.yaml:
把硬编码旋钮(model 选择 / 熔断·预算 rmb_hard_limit=3.0 / 迭代 writer_max_iters=40 / 工作室 Team leader_max_iters=12·per_expert_cap=2 / 品类参数)
抽成中央 YAML、运行时读(env TIER2_GENCONFIG 覆盖 + 缺省回落内置默认);config/middleware/studio/design_team 改读 genconfig。
回归:4 关键旋钮默认取值 == 改造前硬编码值;整 worker 包编译过。
(未externalize:fallback_tree ★阈值 + harness HUMAN_MIN_PATIENCE 门阈值——门阈值次要、gates 现 advisory,留后续。)
【Prompt 外置】prompts.py + contracts/prompts/09-tier2-richgame/(8 .md)+ registry.yaml:
tier2 的 8 条 system prompt(writer/design-leader/4 专家/player/design-system)外置到 Prompt Registry(契约#8),
运行时按 id 读 + 三级回落(env > registry .md > 内置原文)+ best-effort 不中断;{{input.*}} 字符串替换(避开裸 JSON 花括号噎 format)。
roles.py 改读 registry 但对外接口字节不变(studio/design_team call site 零改)。
回归:13/13 产物逐字节 == 改造前(含带参 design_leader/writer 四种入参组合);registry 缺失回落内置原文。Tier0/1 既有 8 条 prompt 零改动(red line)。
全 tier2/+contracts/prompts/ 内、零碰 Tier0/1、compileall + forbidden-import 通过。注:两 workflow 中 U1(genconfig)结构化报告解析失败(基建层),代码已落盘且主会话直接复核(编译+默认值回归过)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 05:32:37 +00:00
zizi
5b35e61f89
feat(tier2): B门-P3 装载与品类——落库seam+versionId+projectType分流 + 品类可插拔机制
...
【U1 第二装载落库(F族)】store.py + run.persist + studio收口 + index.template分流:
SourceProjectStore 接口 + LocalFsStore 真实现(GEN_DIR/_store 内容哈希寻址/版本归档/可重建,9 round-trip 测试过)
+ BackendStore seam(MySQL+OSS 交 Java 后端,forbidden-import 守着不实连)。versionId=v<秒>-<hash前12>,
改源得新版本/保留旧版/fetch 按 version 取回。projectType 分流闸:index.template 从"工厂存在性隐式判断"
升为显式分流(tier2-phaser 现行路 / gamedef-legacy / amodel-2.0 留 seam 报错不静默)。result 新增 store_addressing。
【U2 品类可插拔机制(G/E族)】archetypes.py 注册表 + run/harness 泛化:
品类注册表(key→{数据表schema/脚手架/driver/门/fixture}),business-sim 唯一注册、五件套全指现有资产。
scaffold_init/gate_spec/prompt_hint 改读注册表;business-sim 铺出脚手架/spec/hint 与旧逐字节一致(回归验证)。
富游戏门按品类选(business-sim→现三门;未注册品类→"门待建"占位 passed:false、decision 不会 accept)。
"加新品类=补 5 样内容(非引擎码)"配方写进 archetypes.py。
全 tier2/ 内、零碰 Tier0/1、py_compile+node --check+forbidden-import 通过、金标装配冒烟不受影响。token 真跑验证待 mini-desktop。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 04:49:59 +00:00
zizi
cb7f5c44e8
feat(tier2): B门-P2 自治深化——工作室 Agent Team + AgentState 工作记忆/历史压缩 + 洋葱全钩子+¥硬熔断
...
B门可靠性核心(直攻 spike ~33% 过门率),全在 tier2/、零碰 Tier0/1,py_compile + forbidden-import 通过:
【工作室 Agent Team 阶段1】design_team.py + studio._design_stage 接线 + roles.py 5 角色:
替单 design agent 为星形多 agent——leader 拆题面 → 4 专家 worker(系统/经济/玩法/表现层)分头设计 → leader 汇总连贯设计稿。
2.0.2 纯库无 MsgHub/Team 原语(那在 create_app 服务层)→ 落 worker-as-tool(专家包成 leader 的 FunctionTool,
ReAct 调度 + BYPASS 权限),与 E3 星形语义等价、零拼接零新依赖。预算闸(per_expert_cap/leader_max_iters/timeout)
+ model_sink 计 token + 失败 degrade 回单 agent;产物=design str 形状不变(阶段2 单写零改)。
【AgentState 工作记忆 + 历史压缩】work_memory.py + config.build_context_config + studio resume:
AgentState 三字段(context/cur_iter/tasks_context,源码核验=2.0.2 真实字段名)承载工作记忆 + 轻量 JSON checkpoint;
--resume 读回续跑(不从零重写)。历史压缩走 2.0.2 ContextConfig(换 tier2 富游戏语义压缩提示词/模板,
保住锁定文件/数据表 schema/latch 约定),防 12+ 文件生成丢上下文。
【洋葱全钩子 + ¥硬熔断】middleware.py + trace.py:
补 on_reasoning/on_acting/on_model_call 三钩子产相位段 typed event(经 phase-marker 走 adapter 同路、不与 on_reply 重复计步)。
¥累进硬熔断:on_model_call 动手前按累计¥+预估判,越 DEFAULT_RMB_HARD_LIMIT=3.0/局 fail-closed;活价取不到 degrade 回次数闸。
注:workflow 中 U1 的结构化报告调用解析失败(基建层),但代码已落盘且经主会话直接复核(真 2.0.2 API、依赖满足、编译通过)。
token 真跑验证(多 agent 设计真跑 / 过门率提升 / 压缩保约定 / resume 续跑 / ¥闸按金额拦)待 mini-desktop。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 04:26:12 +00:00
zizi
2c4e2e2248
feat(tier2): B门-P1 验收质量层(advisory)——人可玩门 + L2 full + L3 升门判据
...
修「gate 通过≠人能玩」盲区(feie-005 实证:过九门+富三门却棋盘渲染空 + 8s 耐心人玩不了)。
补齐 D 族三层校验,全 advisory(写 verdict 不碰 decision;自带 Goodhart 守护:advisory 全挂也不翻 decision):
- 人可玩门(play-phaser.cdp.cjs):render-reflects-state(状态有 item→该格 canvas 像素须非空)
+ render-sanity(无 [object Object]/undefined/NaN 漏底文本)+ human-timing(订单耐心 ≥ HUMAN_MIN_PATIENCE_MS=12000·★directional)
- L2 设计符合 full(run.py compute_l2_signals):systemsPresent/mergeDag/ordersReachable/economyConsistent 四硬判据,
从落盘源工程确定性算(替桩)
- L3 升门判据(run.py derive_l3_egregious + studio.py):消费 humanPlayability 的恶性渲染失败→suggestFatal 信号
- schema additive:humanPlayability 段 + L2.mismatches + L3.egregiousRenderFailure
离线验证:py_compile / node --check / JSON 合法 / 24 断言单测(含 Goodhart 守护:advisory 全挂 decision 字节不变)/
金标 L2 离线 passed=True + 反例精确报错。
**fatal 提升 + 金标冒烟集成验证待 mini-desktop**:确认金标仍 ACCEPT(新检查不抛、全 pass)+ feie-005 被挂后,
逐条提 fatal(品类限定有 board/orders 档)。校准数据:金标 patience=16-20s / feie-005=8s / 阈值候选 12s。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 03:46:19 +00:00
zizi
d6e977a5ac
feat(tier2): 图说对账补全核心引擎待补——n≥30 runbook基建+观测成本接线+L3软检(全加性/observe-only)
...
按 tier2 图说目标做缺口分析(8族逐元素比对),补齐 0号 spike 为过门收窄掉、
但图说明确要求的「核心引擎待补」项。全部加性/observe-only:金标冒烟仍 ACCEPT
(九门9/9+富游戏三门3/3,门一道没放松),真依赖下全链 import+自测+一款真 M3 跑验证通过。
G族(n≥30 runbook 执行基建):
- worker/config.py: build_model_openai 便宜档 client(deepseek 经 new-api OpenAI 兼容路,与 M3 Anthropic 路并存)
- worker/run_record.py: G4 采集字段表 → 可序列化 RunRecord(含退路树分流键 fail_system)
- worker/fallback_tree.py: 退路树五出口判定器(Q1–Q4 数字触发线,★阈值常量区待校准)
- batch_run.py / aggregate.py: model×variant×n 批跑(断点续跑/失败隔离)+ 矩阵聚合三图喂判定器
H族(观测/成本接线,把孤儿件缝进 run 主链):
- observability/newapi_pricing.py: 活读 new-api /api/pricing 倍率(取不到回落显式参数+告警)
- middleware.py: Tier2TraceMiddleware 挂 writer agent 最外层洋葱,ReAct 全事件旁路 ingest
- agent_loop/studio.py 收口: records→cost_for_run 折¥;真跑实测 cost_rmb=1.29(newapi-live)、trace 647事件 dropped=0
- contracts/trace/: additive trace 事件契约位(忠实 trace.py 落 sink 形状)
D族(L3 视觉软检接线,observe-only):
- agent_loop/studio.py: 收口调一次 M3 多模态(真截图+真玩取证→fun映射0-100),只写 verdict.L3,绝不参与 decision
- 真跑实测 L3 score=25 准确指出空心表现层;decision=fix 仍由 L1硬门/熔断裁、与 L3 无关(防 Goodhart 成立)
留后(不投机抢建):工作室 Agent Team/第二装载落库/控制面/Agent Service 等按 plan 决策②⑤ gate 到 B门后;
n≥30 等统计相是「跑」非「写」(批跑底座已就位);A-model 4插件复用待合并对账;4处图说 spec-drift 待 doc 线回写。
详见 tier2/HANDOFF.md「图说对账补全」节。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 02:11:59 +00:00
zizi
c543f7c921
docs(tier2): 记 0 号 spike 收敛结果——feie-005 decision=accept + 四根因机器门
...
HANDOFF.md 补 spike 结果段:M3 自治写的面包店经营合成富游戏跑到 decision=accept
(9 L1 门 + 富游戏三门全过、finished=True、无熔断);从首跑 5/9 收敛靠四道机器门
(外层 resume 自纠 / datatable schema 门 / 平台文件锁 / play-scene 工厂契约门)。
判断=go(留观微调):中等模型被机器门挡在正确契约上能自治写出过门富游戏,
但强依赖机器门把契约违规变响亮反馈;下一步 n≥30 测真实成功率。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 22:21:03 +00:00
zizi
8f2bbce5d5
fix(tier2): 数据表加破产路 patience 可达性预检——经济/H/latch 门提前可修
...
spike feie-005 实证(F/G/tripleLink 全转绿后):H_progress/经济/latch 仍挂在「到不了终态」。
真因=数据表 patience 太长(M3 填了 45~65s),但破产路 driver 只跑约 16.8s(bankruptSteps 60×280ms)、
要连续 3 单流失才判 lose → 订单在有界 run 里耗不尽 → bankruptPathLose/bothReachedTerminal/H/latch 全挂
(金标用 16~20s 正为此)。M3 看 economy 反馈后能自己把 patience 调到 [8,8,8,8,12] 修这条,
但反馈不够直白时会绕弯。故 validate_datatable 加 patience 可达性预检:最小 streak 单订单的最大 patience
须落在有界 run 墙钟内(1.5× 余量),超了响亮提示「调小到金标 16~20s 量级」。
单测:金标(16-20s)PASS / feie-005式(45-65s)FAIL。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 22:14:16 +00:00
zizi
f64dcc6532
fix(tier2): play-scene 工厂契约门——拒 class+init(data) 反模式(根因3 最后一环)
...
spike feie-004 实证(play-runtime 抽离 + bindInput/tick 都接上后):D_render/E_live/F/G/H 仍全挂。
看 play-scene 源码:M3 把工厂写成无参 `createPlayScene()` 返回 `class extends Phaser.Scene` +
`init(data){this.core=data.core}` 取 core。但锁定的 main.js 用工厂模式建 scene
(createPlayScene({core,caps,assets,Phaser}) → scene.add(返回的配置对象)),不走 Phaser 的 init(data)、
也不传 data → this.core=undefined → scene 整个空转 → 所有门挂。
扩 validate_play_scene 加工厂契约检查:① 工厂必须收 deps 入参(非无参);② 禁 class extends
Phaser.Scene + init(data) 取 core 的反模式;③ 必须暴露 handleNormalizedInput(harness injectInput 路径)。
单测:golden PASS / M3 class+init(data) 三条精确报错。prompt/hint 给出正确工厂骨架正反例。
至此根因 3(M3 破坏平台接线)四道机器门齐:文件锁(main/systems/...)+ 数据表 schema 门 +
play-runtime 抽离锁定 + play-scene 工厂契约门。门未放松,全是结构性契约检查(防 Goodhart)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 22:03:31 +00:00
zizi
0fd0d4fb10
fix(tier2): 抽平台命脉进锁定 play-runtime.js + play-scene 契约门(根因3 另一半)
...
spike feie-003 实证(lock+schema 都修对后):F_wiring 仍 calls=0、E_live distinct=1/N、
latch=false。diff 出真因——M3 重写 play-scene 时把两件平台命脉一起改没了:
① 输入路由(doHitTest/doHandleInput/this.input.on pointerdown):没了或坐标错位
(用 (col,row) 调 core.tapCell 而非 (i,j))→ driver 注入的 touch 落空/落错格 → 没合成 → F/G 门挂。
② 逐帧 core.update(dt):没了 → 订单耐心不倒计时、赢/输 latch 永不触发 → E_live/H/经济/latch 全挂。
这俩原先混在 agent 可写的 play-scene 里、只靠注释「别动」——无机器门=必被 M3 改掉。
现抽进平台锁定文件 src/scenes/play-runtime.js(bindInput 输入路由 + tick 逐帧推进),
加进 LOCKED_PLATFORM_FILES;fixture play-scene 重构成 create 调 bindInput(this,core)、
update 调 tick(core,delta),薄委托命中给锁定实现(坐标 layout 同源、driver-tap 焊死)。
加 validate_play_scene 契约门(build 段跑):play-scene 必须 import play-runtime 且调 bindInput+tick,
缺了响亮回喂精确指引。prompt/hint 同步:你只管画 render,别碰输入路由与 tick。
门未放松(judge 纯代码判);fixture 重构后须重跑金标 smoke 验仍 ACCEPT(下一步)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:53:53 +00:00
zizi
f8ec30c875
fix(tier2): 焊死平台锁定文件——write_source 拒改装载胶水/三系统(根因3)
...
spike feie-002 实证:loop 自纠(commit b43d59c)已让 M3 续修、数据表 schema 也修对了
(mergeChains/currencies/requires:{id:qty} 全对,三联动门 requiresReachable/dagAcyclic 转绿),
但 F_wiring/G_input/H_progress/callsAddCoins 仍连环挂。diff 出真因:M3 重写了平台锁定的
src/main.js(装载胶水,130 行差异)——丢了 recHook 透传 → 资源系统 addCoins/consumeIngredient
不再记进 window.__engineCalls → F 门 calls=0、合成不记调用、G/H 门跟着挂。
fixture-spec 预建分工本就规定平台预建文件「写死不动」,但只是 prompt advisory、没机器门。
现把它焊成硬约束:write_source 对 9 个平台锁定文件(main.js/game-core.js/systems/*/layout.js/
tables.js/util/*)的真实修改直接拒(幂等回写放行),并提示「只改 play-scene.js + 数据表」。
agent 可写域 = src/scenes/play-scene.js + data/datatable.gold.json + src/scenes/ 新增表现文件。
单测:9 锁定文件命中、play-scene/datatable/新 scene 放行。prompt 同步加固铁律⑦。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:37:41 +00:00
zizi
b43d59cc9a
fix(tier2): loop 自纠三杠杆——外层有界 resume + 数据表 schema 预检 + finish 门
...
spike feie-001 实证三根因(verdict.json):
① loop 不自纠(最大):AgentScope 2.0.2 原生 ReAct 在「模型产无 tool_call 纯文本回合」即退出;
M3 调一次 run_gates 看到 decision=fix 就产空文本收尾(tool_calls=9/40、breaker=None、finished=False)
= 看一次 verdict 就放弃。补编排层有界 resume:agent 停下后若没真 finish 且门没绿且有预算,
带 verdict 失败反馈再 reply(跨 reply 保留 memory=原地续修),上限 6 次;middleware 硬熔断 60/80 仍兜底。
② 数据表 schema 不匹配(F_wiring/三联动门真因):平台锁定 tables.js 按固定 key 读
mergeChains/currencies/orders{requires:{id:qty}};M3 自创 recipes/initialCoins/数组 requires →
合成系统空转却仍 boot(假绿)。加 validate_datatable(schema+DAG+可达性预检),build 段自动跑,
失败响亮回喂精确修复指引(平台读哪些 key、你缺/错哪个)。单测:金标 PASS / M3 自创 FAIL 精确报错 / sentinel PASS。
③ finish 门:验收零自评——没真跑过门或门没绿不许 finish,把失败反馈塞回逼续修。
prompt 同步加固:scaffold hint + writer system 强约束「就地填 sentinel、禁改 key、列平台确切 key、
看到 fix 不许停」。门未放松(judge 纯代码判),防 Goodhart。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:27:32 +00:00
zizi
135a368f2b
fix(tier2): RecordingChatModel usage 取字段防 KeyError——M3 经 Anthropic 端点 usage 缺 cache 字段
...
getattr(u,'cache_read_input_tokens',None) 对 M3 的 ChatUsage 抛 KeyError(缺字段时抛 KeyError 而非 AttributeError,默认值兜不住)→ design 阶段首次 M3 调用即崩。改:每个 usage 字段经 _ug() try(KeyError/AttributeError/TypeError)安全取。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:07:23 +00:00
zizi
27da8d22ae
fix(tier2): play-spec richGame 对齐金标 + 去 controlCheck(I 门经营档 SKIP)
...
① richGame.mergeChains/orders 原是 flour/dough 旧样例,与 fixture 金标
datatable.gold.json(wheat/bread/jam/soda/chocolate/cake) 不一致——三联动门
requiresReachable 虽自洽但不反映真游戏。改成金标 6 链/5 订单同源。
② 去掉 controlCheck:business-sim 经营档=离散点击 + driver 驱动到终态(win),
非「控制体跟手」;且 controlCheck 在游戏已 latch win(终态忽略输入)后 tap →
selected 必不变、I_control 必假,还触发 CDP Input.dispatchTouchEvent 卡死(40s
超时)中断后续富游戏三门。按 harness 文档(I 门对经营档缺省 SKIP)不声明 →
I_control SKIP(向后兼容通过),流程得以走到富游戏三门。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:00:09 +00:00
zizi
e05a1a8b76
fix(tier2): mapToClient 坐标映射去掉错误的 /dpr——driver tap 落对格
...
CDP 探针实证:tap 逻辑(85,175) 本该选中棋盘格(0,0),实际选中(2,1)——坐标整体被
放大 dpr(=2) 倍、点击全落错格 → 合成永不成、coins 卡 20、E_live/G_input/F_wiring/
H_progress 连锁红(且 latch=true 是破产路误判,非真赢)。
根因:mapToClient 旧算法假设「Phaser canvas backing-store 含 DPR、逻辑=c.width/dpr」,
但 host 用 Phaser Scale.NONE,canvas backing-store=逻辑 390×844(不含 DPR 乘子),
故 c.width/dpr=195 错、sx=r.width/195=2。修:sx=r.width/c.width(client↔canvas
内部坐标标准换算,与 DPR 无关;游戏逻辑像素=backing-store 像素)。
real 浏览器实证(probe5):tap(85,175)→selected{0,0}正确;driver 驱动 step16 达
win/coins116;__engineCalls=17 含 resource.addCoins/consumeIngredient(F门/三联动门真接线)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:55:56 +00:00
zizi
8ea6133e63
fix(tier2): recHook 透传到资源系统——F 门/三联动门记 resource.* call-ID
...
F 门/三联动门读 window.__engineCalls 找 resource.addCoins/consumeIngredient 前缀,
但旧版只有 engine-caps(粒子/音频)经 recHook 记 __engineCalls,资源系统只记内部
_callCounts、不进 __engineCalls → calls=0、F 门 + 三联动门真接线判据永假。
修(additive,不破契约必填项):host 经 boot 上下文透传 recHook → main.js 喂
createGameCore → resource-system 完单真调 addCoins/合成真调 consumeIngredient 时
recHook('resource.addCoins'/'resource.consumeIngredient') 记进 __engineCalls。
headless/静态校验下 recHook 缺省 no-op、不抛错。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:48:40 +00:00
zizi
44d1b45583
fix(tier2): 修真接线三处——pointerdown 闭包/逐帧补桌/patience 缩到有界可达
...
CDP 探针实证 driver tap 抛「this.handleNormalizedInput is not a function」→
state0/state1 全 null、E_live=1、F_wiring=0、九门连锁红。三处根因+修:
① Phaser 用「配置对象」实例化 scene 时只搬 create/update/preload,不搬对象上其它
方法 → create 内 `this.handleNormalizedInput`/`this.hitTest` undefined,玩家点屏即抛。
修:把 hitTest/handleNormalizedInput 抽成闭包 doHitTest/doHandleInput,pointerdown
与 host.injectInput 都调闭包、不依赖 this(对象方法保留为薄委托)。
② 合成清空棋盘格、产物只进库存不回落棋盘 → 棋盘很快只剩单件、driver 无对可合成、
赢路卡在中途(offline sim:coins 停 54)。修:core.update 逐帧 merge.refillFromInventory()
(幂等,把库存里没上桌的基础料补进空格)→ offline sim 赢路达 coins116/win。
③ gold patience 440~600s 在有界 driver run(~30s)里订单永不流失 → 经济门破产路
不可达。修:patience 缩到 16~20s(赢路~6s 完成远早于;破产路~20s 内 3 单流失=lose)。
忠实 offline sim 验:patience≤30s 两路都达终态,≥60s 破产路 stuck=play。
验证:headless-smoke + logic-smoke 全绿(赢/输双路可达 + latch 不回弹)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:43:10 +00:00
zizi
712547d212
fix(tier2): fixture readState 投影成 driver 契约形状——破 board is not iterable
...
C_frame 后 harness 抛「board is not iterable」:business-sim.driver findMergePair
对 state.board 做 for...of,但 game-core readState 旧导出 board=merge.boardView()
={size,cells[i][j],selected}(对象,非数组,无可点坐标)→ 抛错、其后八门全「门未执行」。
根因=fixture 导出态与 driver 契约(business-sim.driver §读什么 state)不一致。改:
- 抽 layout.js 单一源(棋盘 BOARD_*/CELL + 订单面板 PANEL_* 逻辑坐标),game-core 与
play-scene 同源不漂移。
- game-core readState 投影成 driver 契约形状:board=扁平格数组[{idx,i,j,x,y,item}]、
orders 补 id 别名=instId、新增 submitTargets[{orderId,x,y}]、mergeChains、
lostStreak(=failStreak 别名)、selected(I 门读)。
- play-scene 填平台侧 TODO-4 订单命中:面板行 k → ordersView()[k].instId →
core.fulfillOrder,与 submitTargets 同源,driver 交单 tap 真可达。
内部网格视图(merge.boardView)仍供 scene 渲染,两者各取所需不冲突。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:31:25 +00:00
zizi
da184f067c
fix(tier2): build-phaser 用 alias 垫片替 external 解 phaser——破 A_boot 工厂缺失
...
iife 格式下 external:['phaser'] 会把 import Phaser from 'phaser' 编成顶层
__require("phaser")(iife 里是抛 Dynamic require not supported 的存根),
bundle 顶层求值即抛 → var __Tier2GameBundle 拿不到赋值 → host 报「工厂缺失」(A_boot)。
改:新增 phaser-window-shim.js(default 导出 window.Phaser),build 用 esbuild alias
把 'phaser' 解析到它(绝对路径,不受 cwd 影响)。普通 ESM 解析不抛错,Phaser 本体仍不进
bundle(垫片只读 window.Phaser),与 host opts.engine 注入边界(Q4)同源。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:26:24 +00:00
zizi
9f95ec6612
fix(tier2): play-phaser harness 从 game-runtime 解析 ws
...
harness 在 tier2/(game-runtime 外)、play 步 cwd=仓根,裸 require('ws') 解析不到 game-runtime/node_modules/ws。改:createRequire(../../game-runtime/package.json) 显式解析(同 browser-evidence 口径)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:19:01 +00:00
zizi
b5acf7c4b5
fix(tier2): build-phaser 从 cwd(game-runtime) 解析 esbuild
...
裸 import('esbuild') 按模块位置(tier2/engine/)解析,找不到 game-runtime/node_modules 的 esbuild。改:裸 import 失败则从 cwd(集成段总是 cd game-runtime)createRequire 解析。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:17:25 +00:00
zizi
856a583325
feat(tier2): Phaser 自治生成引擎全栈首落(workflow 9 agent 建·6c6g 静态全过)
...
override spike-first(创始人 06-23 裁),全栈铺 Phaser tier2 引擎。recon→契约→6模块并行→集成 workflow 产出 ~60 文件,全 6c6g 静态校验过、红线零碰 Tier0/1 产线:
- 契约(6):tier2-source-project.schema / tier2-verdict.schema(fork·round放开·三层校验+富游戏门)/ toolkit 签名 / 探针钩子 / boot-phaser-host.d.ts / mini-肥鹅 fixture 规格
- M1 Phaser scaffold+装载 host+引擎能力面(19;logic-smoke 13/13:五耦合点真接线+赢输双路径+latch不回弹)
- M2 CDP 探针 Phaser 重写+business-sim driver+九门+富游戏三门(5;verdict 过 schema)
- M3 Python 单写 ReAct agent loop+9 工具 toolkit+M3 Anthropic接法+四熔断(9;mini-desktop 真 2.0.2 venv 验:import/9工具/中间件注册 OK)
- M4 datatable schema+金标+资产占位(4)/ M5 prompt+Phaser skill+rag(13)/ M6 成本 RecordingChatModel+trace adapter(3)
- 集成:run_engine.py 入口 + 接线断点已修 + RUN-ON-MINI-DESKTOP.md
待 mini-desktop 真跑(esbuild build + CDP 九门 + M3 生成 = 本质即 0号 spike)。AgentScope 2.0.2 API 逐条对 /root/oss/agentscope 源码核验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:13:44 +00:00
zizi
d8adc3d0d4
chore(tier2): agentscope 版本号 2.0.3→2.0.2(2.0.3 未发布·PyPI 最新=2.0.2)
...
2.0.3 从未发布到 PyPI(最新 2.0.2),requirements.txt 的 ==2.0.3 不可安装。已在 mini-desktop venv 实装 2.0.2 并冒烟:Agent/ReActConfig/Toolkit/FunctionTool/Anthropic*/MCP(Stdio+Http)/create_app(Agent Service)/AgentState/workspace/middleware/event/skill 全在——设计依赖符号对 2.0.2 成立。
活层(docs/tier2/.agents)agentscope 2.0.3→2.0.2:文档+SVG+requirements.txt+knowledge facts(改名 agentscope-2.0.2-facts.md);npm lockfile 第三方 2.0.3 未动。复验 SVG 32 张全过。
注:6c6g 克隆 /root/oss/agentscope 实为 2.0.3-dev(领先 PyPI),与 2.0.2 架构一致(符号已对)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 18:29:06 +00:00
zizi
ccb00bb9f2
docs(tier2): 接住 A-model 分支(Tier1 agentic 优化)——前提对齐+可复用资产+协调
...
feat/mac-amodel-foundation 让廉价线也 agentic 化(ReAct+M3+插件库+九门,仍 LittleJS),部分推翻 tier2「廉价线=声明式壳天花板」前提。创始人 2026-06-23 裁:维持 tier2、两线分立(A-model=LittleJS 轻量经营 / tier2=Phaser 重表现富游戏),边界从「能力档」精确为「引擎/复杂度档」。计划新增「与 A-model 分支的关系」节集中承载:① 插件契约(scene-fsm/hud-ui/session-score/timer-scheduler 引擎无关零语义+sim-business 配方)复用→U6/能力包(最大协同,原漏接);② amodel-gen 循环范式参照→U2/U7;③ play.cdp.cjs 基线(SAA-mode+driven 感知 advisory 分级)刷新→U3/U6;④ 源项目契约维持独立+溯源→KTD7/U9;⑤ L1/L2/L3 术语消歧。brainstorm+plan Problem Frame 前提措辞对齐;HANDOFF 补 A-model 协调。子代理(opus)分析实证。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 05:51:52 +00:00
zizi
4d694dfa17
feat(tier2): 项目初始化骨架(6c6g)——模块边界+依赖锁2.0.3+forbidden-import CI+交接brief
...
在当前设备(6c6g)完成 tier2 富游戏自治生成线项目初始化(plan-stable 部分):tier2/.agent(模块边界/红线/TODO)、README、gen-worker/requirements.txt(独立锁 agentscope==2.0.3)、ci/check-forbidden-import.sh(运行期零碰 SAA 守门·已验通过)、HANDOFF.md(交接 Mac brief)。实现+运行调优转交 Mac/mini-desktop(真跑需 chrome/headless,6c6g 禁)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 20:48:22 +00:00