diff --git a/pbl_runtime_ext/init.py b/pbl_runtime_ext/init.py index 7940517..eec9728 100644 --- a/pbl_runtime_ext/init.py +++ b/pbl_runtime_ext/init.py @@ -31,7 +31,10 @@ else: _M11B_IMPORT_ERROR = None MODULE = "pbl_runtime_ext" -EXPECTED_TABLES = 3 +# [r13-start3 修复] 原值 3 是陈旧硬编码:tables.py(单一真源)为 4 表—— +# M11a 新增 pbl_runtime_idempotency 后本常量未同步,导致 fail-closed 拒启。 +# 期望表数以 tables.TABLES 为准,此处仅做漂移哨兵。 +EXPECTED_TABLES = 4 # M11b 必须在 ServerEnv 上注册的名字(dspy 裸全局名调用);自检据此核对「三处同步」 M11A_ENV_REGISTRATIONS = ( @@ -303,9 +306,12 @@ def load_pbl_runtime_ext(env=None): for m in msgs: _log(srv, m) if not ok: + # [r13-start3 修复] 原过滤 "FAIL" in m:失败行(如"表数=4 应为 3")不含 FAIL + # → 报错正文恒为空,不可行动。改为取全部非 PASS 行,仍为空则回显全量尾部。 + _failed = [m for m in msgs if "PASS" not in m] or msgs[-6:] raise RuntimeError( "%s self_check FAILED(fail-closed,拒绝启动):%s" - % (MODULE, "; ".join([m for m in msgs if "FAIL" in m][:6])) + % (MODULE, "; ".join(_failed[:6])) ) # 注册完整性同样 fail-closed:漏一个 dspy 契约名字就拒绝挂载(防上线 NameError)