session-mechanism:解析不到文档库根时如实报错留痕(第 11 条禁令)
⚠️ 这批改动**不是本次会话写的**,是本机协作机制里别的会话留在工作区的;我按用户「就可以提交仓库」
的授权一并入库,提交前只做了语法校验 —— 三个 py 过 `py_compile`,`handoff-guard.sh` 过 `bash -n`。
- `install.py` `write_roots()`:`DSH_DOCS_ROOT` 解析不到时,原行为是**整行不生成、不报错、不留痕**
⇒ 锁类脚本读不到该键 ⇒ `handoff-guard.sh` 回落到技能包自己的 `scripts/` ⇒ 锁根落进技能包
(另一台机器实测已在 `<技能包>/scripts/05-交接单/.locks` 长出一把锁)。现改为**如实报错 + 留痕**,
并写明「本区确实没有 dsh 文档库时就写本工作区根」这条出路。
- `collabd.py` / `hooks/lock-guard-hook.py` / `lock/handoff-guard.sh`:同批配套(68 增 / 12 删)。
This commit is contained in:
1 parent
f2d07b47ad
commit
22799fc9c2
4 files changed
+68
-12
No files matched your search
@@ -3965,18 +3965,32 @@ def ds_active_domain_locks() -> dict:
|
||||
"""
|
||||
out = {}
|
||||
_me = str(os.environ.get("DSH_SESSION_NAME") or "").strip()
|
||||
# 锁根=文档库的 `05-交接单/.locks`;找不到就按 `DSH_CODE_REPO` 推一次
|
||||
# 🔴🔴 锁根=文档库的 `05-交接单/.locks`。**键名必须与写侧逐字同源:`DSH_DOCS_ROOT`**
|
||||
# (写侧六处:`lock/handoff-guard.sh:46`/`lock/preflight-lock.sh:30`/`lock/handoff-status.py:40`/
|
||||
# `lock/orphan-lock.py:203`/`hooks/lock-guard-hook.py:74`/`session-rules-check.py:107`)
|
||||
# 2026-10-15 修:原读 `DSH_LOCKROOT`/`DSH_DOCS_REPO` —— 这两个键**全包只此一处**读,
|
||||
# `env/roots.env.example` 里也没有 ⇒ 读写两侧**永不重合** ⇒ 读侧恒判「锁根定位不到」。
|
||||
# ✅ 现行:`DSH_LOCKROOT` 保留为**高位兼容别名**(有值时优先),⛔ 不再读 `DSH_DOCS_REPO`。
|
||||
_cands = []
|
||||
if os.environ.get("DSH_LOCKROOT"):
|
||||
if os.environ.get("DSH_LOCKROOT"): # 兼容别名(高位)
|
||||
_cands.append(os.environ["DSH_LOCKROOT"])
|
||||
_dr = os.environ.get("DSH_DOCS_REPO") or ""
|
||||
_dr = (os.environ.get("DSH_DOCS_ROOT") or "").strip() # ← 与写侧同源
|
||||
if _dr:
|
||||
_cands.append(os.path.join(_dr, "05-交接单", ".locks"))
|
||||
for _p in (r"D:\github\dsh_shenxian\dsh-server-docs\05-交接单\.locks",
|
||||
"D:/github/dsh_shenxian/dsh-server-docs/05-交接单/.locks"):
|
||||
_cands.append(_p)
|
||||
root = next((c for c in _cands if os.path.isdir(c)), "")
|
||||
if not root:
|
||||
# ⛔ 不再回落到"猜的盘符"(第 11 条禁令):如实报错 + 留痕。
|
||||
# 静默扫空与"本机真没有"表现完全一样,是最难查的一类假象。
|
||||
try:
|
||||
_lg = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "logs", "_collabd.log")
|
||||
_lg = os.path.normpath(_lg)
|
||||
os.makedirs(os.path.dirname(_lg), exist_ok=True)
|
||||
with open(_lg, "a", encoding="utf-8", errors="replace") as _f:
|
||||
_f.write("[%s] ⛔ 域锁锁根定位不到:`DSH_DOCS_ROOT` 为空或该目录不存在"
|
||||
"(候选=%r;⛔ 不再回落到猜的盘符)\n"
|
||||
% (time.strftime("%Y-%m-%d %H:%M:%S"), _cands))
|
||||
except Exception:
|
||||
pass
|
||||
return {"__unreadable__": "(锁根定位不到)"}
|
||||
try:
|
||||
for nm in os.listdir(root):
|
||||
|
||||
Reference in new issue
Block a user