fix(tier2): serve-and-play chrome cleanup 杀整树(治泄漏)+ 切片二 U5 执行发现
chrome 泄漏根因:cleanup() 只 kill $CHROME_PID(父)→ renderer/gpu 子进程 reparent 给 init 成孤儿、 跨款累积(实测 U5 Round1 撞 wall_timeout、杀批组仍残留)。修=cleanup 加 pkill -f "$USER_DATA_DIR" 杀本实例整棵 chrome 树(user-data-dir mktemp 唯一、不误伤别的 chrome/live worker)。 plan 执行发现:① env 闸缺口(fresh worktree 无 node_modules/esbuild → build 失败 → M3 假性不收敛, 已补 U1 S0 + Risks);② M3 已证能收敛(smoke 面包+水果 clean accept、九门全过); ③ U5 Round1 被 confound(chrome 泄漏 + live worker:9501/@8200 争 4 核)、需隔离干净重跑。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
eed34d0a32
commit
8d4654ab63
@ -111,7 +111,7 @@ U1 是前置阻断(其 smoke 段 blocking);U2/U3/U4 是可并行的前置准备(
|
||||
|
||||
**步骤**:
|
||||
|
||||
- [ ] **S0(硬前置闸 · 不满足即阻塞 U1/U5、不开跑)** mini-desktop 可达 + 环境就绪:`ssh root@100.64.0.7 'echo ok'` 通;`/root/.venvs/agentscope-tier2/bin/python -c "import agentscope; print(agentscope.__version__)"` == `2.0.2`;chrome 可用(非 exit 144);new-api `http://100.64.0.8:3000` quota 够(M3 路活)。任一不满足 → 见 Risks「mini-desktop 不可达」行,不进 S1。
|
||||
- [ ] **S0(硬前置闸 · 不满足即阻塞 U1/U5、不开跑)** mini-desktop 可达 + 环境就绪:`ssh root@100.64.0.7 'echo ok'` 通;`/root/.venvs/agentscope-tier2/bin/python -c "import agentscope; print(agentscope.__version__)"` == `2.0.2`;chrome 可用(非 exit 144);new-api `http://100.64.0.8:3000` quota 够(M3 路活);**`node_modules/esbuild` 可解析**(`build-phaser.mjs` 依赖;**fresh git worktree gitignored 不带 node_modules、须 symlink 既有树或 npm install——2026-06-28 实证漏此即 build 失败、M3 全程 thrash**,phaser 走 shim external 不需)。任一不满足 → 见 Risks 行,不进 S1。
|
||||
- [ ] **S1(复现 smoke · blocking)** 在 mini-desktop 用 dev/2.0.0 代码跑一款 M3 面包店:
|
||||
```bash
|
||||
ssh root@100.64.0.7 # 真 IP,绕系统代理 fake-ip(系统代理是 198.18.x fake-ip)
|
||||
@ -293,7 +293,7 @@ flowchart TD
|
||||
|
||||
| 风险 | 影响 | 缓解 |
|
||||
|---|---|---|
|
||||
| **mini-desktop 不可达 / venv 缺失 / chrome exit 144**(U1·U5 真跑全压它) | U1/U5 全阻塞 | U1 **S0 硬前置闸**(可达+agentscope 2.0.2+chrome+quota),不满足即停、不开跑 |
|
||||
| **mini-desktop 不可达 / venv 缺 / chrome exit 144 / `node_modules` esbuild 缺**(U1·U5 真跑全压它;**fresh worktree 必缺 esbuild → build 失败 → M3 全程 thrash**,2026-06-28 实证) | U1/U5 全阻塞 或 假性 M3-不收敛 | U1 **S0 硬前置闸**(可达+agentscope 2.0.2+chrome+quota+**esbuild 可解析**),不满足即停;诊断"不收敛"先排 build/env(read 产物 + run_gates 取真九门),别据低 CPU 误判卡死 |
|
||||
| dev/2.0.0 tier2 代码与 feie-005 分支有差异,S1 smoke 不复现;或 harness 假阳把坏游戏判 accept | 收敛环失败归因不清(环境 vs 模型);失败计数偏低制造假 GO | U1 **S1(金标过·不假阴)+ S1b(坏游戏拒·不假阳)双绿**为可开跑闸;不双绿不进 U5 |
|
||||
| mini-desktop 串行跑 4 轮墙钟长(~3.4h)+ 烧 token/¥ | 资源/成本 | U2 批级 fail-closed 兜底;串行本就为省资源争用;单 gen ¥3 硬限 |
|
||||
| `repairs` 字段是 `model_calls` 近似、非真自纠轮数 | 收敛中位图偏差 | 仅作辅助观测;go/no-go 主判据是 KTD1 失败计数,不依赖 repairs |
|
||||
@ -362,7 +362,15 @@ flowchart TD
|
||||
|
||||
## 执行发现
|
||||
|
||||
(U1 复现 smoke 结果 / 沙箱裁定 / U5 收敛环 go/no-go 结论落此。)
|
||||
**2026-06-28 执行(本机 + mini-desktop tier2-cv worktree):**
|
||||
|
||||
- **U2/U3/U4 本机 TDD 全绿、已 push(`eed34d0a`)**:U3 fallback_tree 自测 9 + U2 批级护栏 3 + U4 play-scene 门 4。
|
||||
- **U1 关键发现 —— 漏掉的 env 闸(plan 自我修正)**:首跑 fresh M3 面包 smoke「FAIL」(852s、撞 max_iters=40+step_cap>60、没 finish),一度误判为 M3 不收敛 / caps 太紧 / dev 回归。**真因是环境**:新建的 `tier2-cv` git worktree **没有 `node_modules/esbuild`**(gitignored、不随 checkout 来),`build-phaser.mjs`(`import esbuild`,phaser 走 shim external)构建失败 → gen 的 build 步拿不到 bundle → M3 收到的是 build 错误而非九门反馈 → 写一堆探针脚本(`_probe_runtime.mjs`/手搓 build.sh `find / -name esbuild`)瞎试 → churn 撞熔断。
|
||||
- **铁证(env 修后)**:`ln -s` 接上 esbuild(`tier2-run/game-runtime/node_modules`)→ `build-phaser.mjs` 立即产 bundle(42KB)→ 在 M3 那份「失败」产物上 `run_gates`:**九门 7/9 过**(只 H_progress ❌ progress=false)+ **富三门 2/3 过**(只 经济 ❌ profitPathWin✗ 盈利路赢不了),decision=fix。即 **M3 本就写出接近过关的多系统富游戏、只差 2 道可修平衡门**(spike 式可据反馈自修),「M3 不收敛」是 build 坏导致拿不到反馈的假象。
|
||||
- **教训(已补 U1 S0 + Risks)**:fresh worktree 必须先备 `node_modules/esbuild`;低 CPU(3s/12min, STAT=Sl)是 I/O-bound 假象、不能据此判"卡死"——要读工作区产物 + run_gates 取真九门。
|
||||
- **U1 沙箱裁定**:收敛环走 in-process 本地 runner(spike-proven);DockerWorkspace 托管小验作 go/no-go 后 Phase B 项(in-process 兜底已足,不阻塞)。
|
||||
|
||||
(U5 收敛环 Round 1 结果 / go/no-go 结论待落。)
|
||||
|
||||
## 状态
|
||||
|
||||
|
||||
@ -49,6 +49,10 @@ fi
|
||||
USER_DATA_DIR="$(mktemp -d -t tier2-chrome-XXXX)"
|
||||
SERVE_PID=""; CHROME_PID=""
|
||||
cleanup() {
|
||||
# 杀整棵 chrome 进程树:只 kill $CHROME_PID(父)会把 renderer/gpu 子进程 reparent 给 init 成孤儿、泄漏
|
||||
# (实测串行批跑跨款累积、撞 wall_timeout)。用唯一的 $USER_DATA_DIR 精确匹配本实例【全部】chrome 进程,
|
||||
# 不误伤别的 chrome 实例 / live worker 的 chrome(它们 user-data-dir 不同)。
|
||||
[ -n "$USER_DATA_DIR" ] && pkill -f "$USER_DATA_DIR" 2>/dev/null
|
||||
[ -n "$CHROME_PID" ] && kill "$CHROME_PID" 2>/dev/null
|
||||
[ -n "$SERVE_PID" ] && kill "$SERVE_PID" 2>/dev/null
|
||||
rm -rf "$USER_DATA_DIR" 2>/dev/null
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user