"""冻结重跑 spot check:验证修复后的 spawn 日志快照真能落盘 PHASE/TIER/MODEL。 对 reasoning-tier-allocation(本次吸收目标 skill)跑一次真实 spawn: job_type=learn_apply(映射 verify/high),命令未 pin -m ⇒ 期望 MODEL:DEFAULT(unpinned)。 真实执行 _spawn_hermes_job(非存在性检查),读回调日志头部断言字段。 """ import sys, time, pathlib sys.path.insert(0, "/data/data/com.termux/files/home/wechat-viewer") import app # noqa: E402 tid = app._spawn_hermes_job( "learn_apply", "tier-probe", ["hermes", "chat", "-q", "只回复 OK", "-s", "reasoning-tier-allocation", "--yolo", "-t", "terminal"], timeout=90) lf = pathlib.Path(app.HERMES_JOBS_DIR) / f"{tid}.log" time.sleep(3) head = lf.read_text()[:700] if lf.exists() else "" print("TID:", tid) print("---- log head ----") print(head) print("------------------") checks = [ ("CMD 字段落盘", "\nCMD:" in "\n" + head), ("ENV_KEYS 字段落盘", "ENV_KEYS:" in head), ("TIMEOUT 字段落盘", "TIMEOUT:" in head), ("PHASE=verify(learn_apply 属验证阶段)", "PHASE:verify" in head), ("TIER_EXPECTED=high(验证阶段期望高档)", "TIER_EXPECTED:high" in head), ("MODEL 观测到未 pin 默认档", "MODEL:DEFAULT(unpinned)" in head), ("无 SNAPSHOT_ERROR", "SNAPSHOT_ERROR" not in head), ] failed = [l for l, ok in checks if not ok] for l, ok in checks: print(("PASS " if ok else "FAIL ") + l) print(f"\n{len(checks)-len(failed)}/{len(checks)} PASS") raise SystemExit(1 if failed else 0)