chore(session-mechanism): 交接单目录改名(去 05- 前缀)+图模式触发词改为「图完成目标」
This commit is contained in:
1 parent
ce05207aa2
commit
5c862e4005
15 files changed
+62
-62
No files matched your search
@@ -6,7 +6,7 @@ lock-guard-hook.py — 「无锁不许改库」的强制钩子(WorkBuddy PreTo
|
||||
────────────
|
||||
2026-09-12 实证:`handoff-guard.sh` 输出「无全局锁」被会话读成「环境干净,可以开工」
|
||||
(正确读法是「你快去抢锁」),结果**两个会话同时改了本库**。措辞已在 guard 与
|
||||
`05-交接单/README.md` 里补正,但**约定拦不住不看的人** —— 本脚本是强制层。
|
||||
`交接单/README.md` 里补正,但**约定拦不住不看的人** —— 本脚本是强制层。
|
||||
|
||||
作用域(**刻意收窄:对其他项目零影响**)
|
||||
────────────
|
||||
@@ -17,7 +17,7 @@ lock-guard-hook.py — 「无锁不许改库」的强制钩子(WorkBuddy PreTo
|
||||
|
||||
判据
|
||||
────
|
||||
`<文档库根>/05-交接单/.exec-lock` 存在 = 有人持锁 → 放行(归属由台账 OWNER 承担);
|
||||
`<文档库根>/交接单/.exec-lock` 存在 = 有人持锁 → 放行(归属由台账 OWNER 承担);
|
||||
不存在 = **deny**,并把可直接粘贴的抢锁命令回给 Agent。
|
||||
|
||||
为什么**不拦 Bash**
|
||||
@@ -91,9 +91,9 @@ if not DOCS_ROOT:
|
||||
sys.exit(0)
|
||||
# ⛔ 不留盘符:代码库=文档库的上一级(`<repo>/dsh-server-docs` 的约定)
|
||||
CODE_REPO = os.environ.get("DSH_CODE_REPO") or (os.path.dirname(DOCS_ROOT) if DOCS_ROOT else "")
|
||||
LOCK_DIR = os.path.join(DOCS_ROOT, "05-交接单", ".exec-lock")
|
||||
LOCK_DIR = os.path.join(DOCS_ROOT, "交接单", ".exec-lock")
|
||||
OWNER_FILE = os.path.join(LOCK_DIR, "OWNER")
|
||||
LOCKS_ROOT = os.path.join(DOCS_ROOT, "05-交接单", ".locks")
|
||||
LOCKS_ROOT = os.path.join(DOCS_ROOT, "交接单", ".locks")
|
||||
|
||||
GUARD_CMD = 'bash 07-scripts/handoff-guard.sh --claim-exec "<你的会话名>"'
|
||||
GUARD_DOMAIN_CMD = 'bash 07-scripts/handoff-guard.sh --claim-exec "<你的会话名>" --domains <域...>'
|
||||
@@ -101,7 +101,7 @@ GUARD_DOMAIN_CMD = 'bash 07-scripts/handoff-guard.sh --claim-exec "<你的会话
|
||||
# ⚠️ 顺序有意义:**先长后短**,与 handoff-guard.sh 的 _ANCHOR_SEGS 逐字一致。
|
||||
# 两侧只要顺序或集合不同 ⇒ 同一文件算出不同域键 ⇒ 域锁静默失效(假绿)。
|
||||
# 🔴🔴 2026-10-03 10:0x **修一处真缺陷(不是文档漂移)**:本行原为
|
||||
# `… "docs", "07-scripts", "08-skills", "05-交接单"`,
|
||||
# `… "docs", "07-scripts", "08-skills", "交接单"`,
|
||||
# 而真源 `handoff-guard.sh:66 _ANCHOR_SEGS` 是 `… "docs", "scripts", "skills", "交接单"`。
|
||||
# ⚠️ 后果不是"看起来不一致":`domain_key()` **拿本表参与实际计算** ⇒ 同一个文件
|
||||
# 在 hook 侧与抢锁侧会算出**不同域键** ⇒ 两边各抢各的 ⇒ **域锁等于没有(假绿)**。
|
||||
@@ -339,7 +339,7 @@ def main() -> None:
|
||||
who = lock_owner()
|
||||
msg = f"🔐 全局执行锁【已被占用】:{who} —— 但**域锁可绕开它**:不重叠的域仍能并行。"
|
||||
hook_log("SessionStart", f"旧全局锁被占 owner={who} source={src}")
|
||||
elif os.path.isdir(DOCKS := os.path.join(DOCS_ROOT, "05-交接单", ".locks")) and os.listdir(DOCKS):
|
||||
elif os.path.isdir(DOCKS := os.path.join(DOCS_ROOT, "交接单", ".locks")) and os.listdir(DOCKS):
|
||||
msg = "🔐 已有域锁在跑 —— 开工前先抢你要的域(不重叠即可并行):" + GUARD_DOMAIN_CMD
|
||||
hook_log("SessionStart", f"有域锁无全局锁 source={src}")
|
||||
elif os.path.isdir(DOCS_ROOT):
|
||||
|
||||
@@ -160,11 +160,11 @@ TRIGGERS = (
|
||||
# 🔴 2026-10-19 用户令(逐字「把skill 改成 完成目标也能触发」):光写「项目机制完成目标」不够 ——
|
||||
# 用户口语里会把机制名字省掉,只说「完成目标」;词表里必须有**裸「完成目标」**这一条,
|
||||
# 否则那句同样是派活授权,却一条都命不中。
|
||||
# 🔴 2026-10-19 用户令(逐字「完成复杂目标 走graph , 完成目标 走 loop」):
|
||||
# **两条口令分工** —— `完成复杂目标` ⇒ 图模式 graph;`完成目标` ⇒ 现有 loop 机制。
|
||||
# ⚠️ 两句不是包含关系("完成复杂目标"里没有连续的"完成目标"子串),所以两词都要进表,
|
||||
# 🔴 2026-10-19 用户令(逐字「图完成目标 走graph , 完成目标 走 loop」):
|
||||
# **两条口令分工** —— `图完成目标` ⇒ 图模式 graph;`完成目标` ⇒ 现有 loop 机制。
|
||||
# ⚠️ 两句不是包含关系("图完成目标"里没有连续的"完成目标"子串),所以两词都要进表,
|
||||
# 分流按"先看复杂"判,⛔ 不许靠子串顺序碰运气。
|
||||
'完成复杂目标', '复杂目标',
|
||||
'图完成目标', '复杂目标',
|
||||
'完成目标',
|
||||
'使用任务会话', '使用执行会话', '使用协作会话', '任务会话完成', '执行会话完成',
|
||||
'继续完成目标', '继续目标', '继续完成之前', '继续之前的',
|
||||
@@ -188,7 +188,7 @@ _LOAD_RULES = ('按规则来', '按规则做', '按作业规则', '遵守规则'
|
||||
# 命中"使用任务会话完成目标"的人,要的是**会话机制本体**(怎么建排期/怎么派活/
|
||||
# 自决策白名单在 `references/02-功能优先协作协议.md`),⛔ 不是决策方法论。
|
||||
_LOAD_SESSION = ('使用项目机制', '项目机制完成', '项目机制',
|
||||
'完成复杂目标', '复杂目标', '完成目标',
|
||||
'图完成目标', '复杂目标', '完成目标',
|
||||
'使用任务会话', '使用执行会话', '使用协作会话', '任务会话完成', '执行会话完成',
|
||||
'继续完成目标', '继续目标', '继续完成之前', '继续之前的',
|
||||
'会话技能', '会话机制', '创建任务会话', '建任务会话',
|
||||
@@ -413,18 +413,18 @@ def main():
|
||||
hit_rules = [w for w in hits if w in _LOAD_RULES]
|
||||
if hit_session:
|
||||
head = '检测到用户本轮**点名了会话机制 / 派活**(命中:%s)。' % '、'.join(hit_session)
|
||||
# 🔴 2026-10-19 用户令(逐字「完成复杂目标 走graph , 完成目标 走 loop」):
|
||||
# 两条口令分流。**先判"复杂"**("完成复杂目标"里没有连续的"完成目标"子串,但仍按先后判更稳)。
|
||||
# 🔴 2026-10-19 用户令(逐字「图完成目标 走graph , 完成目标 走 loop」):
|
||||
# 两条口令分流。**先判"复杂"**("图完成目标"里没有连续的"完成目标"子串,但仍按先后判更稳)。
|
||||
mode = ''
|
||||
if '复杂目标' in prompt:
|
||||
mode = ('🔴 **本轮走 graph(图模式)**:用户说「完成复杂目标」⇒ 用本包 `graph/graphctl.py`:\n'
|
||||
if '图完成目标' in prompt or '复杂目标' in prompt:
|
||||
mode = ('🔴 **本轮走 graph(图模式)**:用户说「图完成目标」⇒ 用本包 `graph/graphctl.py`:\n'
|
||||
' `init` 建图 → `check` 校验 → `tick`(算完就开)→ 执行方 `report` 回报 → `progress` 看进度;\n'
|
||||
' 看板 `http://127.0.0.1:20100/` 的「图模式」块会实时显示这张图。\n'
|
||||
' ⛔ 不走 loop 排期、⛔ 不写 `goal.json`/`tasks.json`;图只负责编排,节点上的活仍由会话去干。\n\n')
|
||||
elif '完成目标' in prompt:
|
||||
mode = ('🔴 **本轮走 loop(现有项目机制)**:用户说「完成目标」⇒ 按目标 + 台账 + 队列那套推进'
|
||||
'(`goalctl`/`collabd`/检查会话)。\n'
|
||||
' ⛔ 不擅自改走 graph —— 要走图,用户会说「完成复杂目标」。\n\n')
|
||||
' ⛔ 不擅自改走 graph —— 要走图,用户会说「图完成目标」。\n\n')
|
||||
body = mode + (
|
||||
'⛔ **不要凭记忆代替、也不要以"我已经知道这套机制"为由跳过**:\n'
|
||||
' **先调用 Skill 工具加载 `session-mechanism`**(会话机制 + 多会话执行总入口 · 含**首屏第 0 步加载门槛**'
|
||||
|
||||
Reference in new issue
Block a user