session-mechanism:相对路径补漏两处(用户令「能用相对路径的都要用相对路径」漏网的)
承接 fe22f4c。上一轮清了 4 处盘符硬编码,本轮复核发现还漏 2 处: ① scripts/hooks/wb-result-hook.py 的 CARE_PREFIX 原写死 "e:/programdata/aiproject/"(盘符 + 用户名进代码)⇒ 换机即全错, 且**域外过滤会静默走偏**(把自家会话判成"域外"、不读转录)。 改:从 env/roots.env 的 DSH_AIROOT 推导(新增 _sm_load_roots(),上跳三级到包根)。 判据=「这个根能不能从『我自己的位置』推出来」—— 推不出 ⇒ 读本包 env/roots.env。 取不到 ⇒ classify() **如实报错 + 打 stderr 留痕**(⛔ 不静默把全部会话判成域外)。 ② scripts/selftest.py:6875 假样本里的 "workspace": "E:/selftest" 改为 "__selftest_ws__",与同段已改的两处(__selftest_no_such_ws__ / __selftest_ws__)同族。 验收: · 有 DSH_AIROOT ⇒ 分类逐样本与改前硬编码**完全一致** (home / line 客户端线 / line ai1net_ui / other contentm_agent / outside) · 包不带 env/(拷到别处)⇒ **如实报错 + stderr 留痕**,⛔ 不静默 · selftest 全量 rc=0 · PASS 110 / FAIL 0 · 语法失败 0
This commit is contained in:
1 parent
fe22f4cebe
commit
7a08cd3366
2 files changed
+49
-3
No files matched your search
@@ -63,6 +63,40 @@ LEDGER_MAX = 8 * 1024 * 1024 # 8 MiB 就停写(留痕,不删)
|
||||
# ⇒ 本脚本 spawn 的一切子进程**一律隐窗**(非 Windows 上该标志无意义 ⇒ 取 0)。
|
||||
HIDE = 0x08000000 if os.name == "nt" else 0 # CREATE_NO_WINDOW
|
||||
|
||||
|
||||
def _sm_load_roots():
|
||||
"""把本包 `env/roots.env` 注入进程 env(宿主已有的**不动** ⇒ `setdefault`)。
|
||||
|
||||
🔴 2026-10-14(用户令:「会话技能中 能用相对路径的都要用相对路径」):
|
||||
本文件原先把「大项目根」写死成 `e:/programdata/aiproject/`(盘符 + 用户名写进代码)
|
||||
⇒ 换机 / 换用户目录就全错,而**域外过滤会静默走偏**(把自家会话判成"域外")。
|
||||
判据分两半:
|
||||
· **能**从本包位置推出来的(`scripts/`、`boards/` 这类)⇒ 从 `__file__` 上跳推导;
|
||||
· **不能**的(大项目根 —— 技能包在配置目录下,跟它没有任何相对关系)
|
||||
⇒ 读本包 `env/roots.env` 的 `DSH_AIROOT`(`install.py` 生成,不入库)。
|
||||
⚠️ 本文件在 `scripts/hooks/` ⇒ 到包根要上跳**三级**。
|
||||
"""
|
||||
_here = os.path.dirname(os.path.abspath(__file__))
|
||||
for _up in range(6):
|
||||
_base = os.path.normpath(os.path.join(_here, *([".."] * _up)))
|
||||
for _rel in (("env", "roots.env"), ("roots.env",)):
|
||||
_p = os.path.join(_base, *_rel)
|
||||
if os.path.isfile(_p):
|
||||
try:
|
||||
with open(_p, encoding="utf-8") as _f:
|
||||
for _ln in _f:
|
||||
_ln = _ln.strip()
|
||||
if _ln and not _ln.startswith("#") and "=" in _ln:
|
||||
_k, _v = _ln.split("=", 1)
|
||||
os.environ.setdefault(_k.strip(), _v.strip())
|
||||
except Exception:
|
||||
pass
|
||||
return _p
|
||||
return ""
|
||||
|
||||
|
||||
_sm_load_roots()
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 🔴 工作区根**靠上溯发现**,⛔ 不靠"脚本在第几层"(2026-09-28 实测 bug)
|
||||
# 事故:脚本原在 `交付物/`,用 `WS = dirname(dirname(__file__))` 正好对;
|
||||
@@ -112,7 +146,10 @@ LINE_WS = { # ⚠️ 改这里**必须同步** wb-sup
|
||||
"ai1net-dsh-anywhere": "手机接入线",
|
||||
"ai1net_ui": "ai1net_ui",
|
||||
}
|
||||
CARE_PREFIX = "e:/programdata/aiproject/" # 大项目根:域外一律不读转录
|
||||
CARE_PREFIX = ((os.environ.get("DSH_AIROOT") or "").replace("\\", "/").strip("/") + "/").lower() \
|
||||
if (os.environ.get("DSH_AIROOT") or "").strip() else "" # 大项目根:域外一律不读转录
|
||||
# ⚠️ 2026-10-14:原写死 `e:/programdata/aiproject/` ⇒ 改为从 `DSH_AIROOT`(`env/roots.env`)推导。
|
||||
# 取不到 ⇒ **空串**,由 `classify()` 在真正要用时**如实报错 + 留痕**(⛔ 不许静默把全部会话判成域外)。
|
||||
SKIPPED = os.path.join(INBOX, "skipped.jsonl") if INBOX else ""
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -408,7 +445,16 @@ def classify(cwd: str):
|
||||
if not cwd:
|
||||
return "outside", "?"
|
||||
c = cwd if cwd.endswith("/") else cwd + "/"
|
||||
if not c.startswith(CARE_PREFIX):
|
||||
if not CARE_PREFIX:
|
||||
# 🔴 2026-10-14:推不出大项目根 ⇒ **如实报错 + 留痕**,⛔ 不许静默把全部会话判成域外
|
||||
# (静默与"本机真没有相关会话"表现一样,最难查)。
|
||||
try:
|
||||
sys.stderr.write("[wb-result-hook] ⛔ 推不出大项目根(`DSH_AIROOT` 空且 `env/roots.env` 缺它)"
|
||||
"⇒ 无法判 scope。请跑一次 `python install.py --apply --workspace <本区>`\n")
|
||||
except Exception:
|
||||
pass
|
||||
return "outside", (cwd.rstrip("/").split("/")[-1] or "?")
|
||||
if not c.lower().startswith(CARE_PREFIX):
|
||||
return "outside", (cwd.rstrip("/").split("/")[-1] or "?")
|
||||
rest = c[len(CARE_PREFIX):].strip("/")
|
||||
seg = rest.split("/", 1)[0] if rest else "?"
|
||||
|
||||
@@ -6872,7 +6872,7 @@ def t_board_render_runs_clean():
|
||||
"acceptance": {"A1-真": "过(自测)", "A2-假": "待达标(自测)",
|
||||
"_说明": "说明行 ⛔ 不进分母"}},
|
||||
"project": {"short": "自测", "title": "自测目标", "id": "st-1",
|
||||
"main_sid8": "st123456", "workspace": "E:/selftest",
|
||||
"main_sid8": "st123456", "workspace": "__selftest_ws__",
|
||||
"criteria": ["自测判据"], "topics": ["自测类别"],
|
||||
"topics_source": {"kind": "declared", "at": "自测", "by": "自测"},
|
||||
"main_by_topic": {}},
|
||||
|
||||
Reference in new issue
Block a user