spotcheck_phase_tier_snapshot.py 1.55 KB
"""冻结重跑 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 "<NO LOG>"
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)