session-mechanism:多角度自检后的 5 处修补 + 新增「21 条条目名三方同源」自测
按用户令「优化完成后 在详细多角度 检查确认无误」,对 05/06/SKILL.md/索引 做了一轮多角度核对。 查出的真问题(都已修): - 05 残留旧编号「06 的 B⑨/B⑥」⇒ 06 的编号已统一成 #N,改为 #9/#6 - 06 总表 #15 写「上游→下游不断裂」,而正文与 SKILL.md 都写「上下游不断裂」⇒ 统一 - 05 用了旧称「宿主库」(该文件 10-15 新写,按术语规范应当用正式名)⇒ 改「WorkBuddy 本体的库」 - 06 的 A 段声明「不复述判据」,但 #3 条又把 env/roots.env 的细节抄了一遍 ⇒ 删复述 - SKILL.md §0 ⑨ 的 A 段没编号、C 层写简写(「职责不越界」vs 正文「步骤间职责不越界」)⇒ 补 #1~#5、统一 C 层全名 新增自测 t_skill06_entries_same_source(5 项):SKILL.md §0 ⑨ 与 06 正文/总表 21 条逐条同名(数字 + 名字)。 该判据第一版自己就有两个毛病,靠变异对照照出来:① 抓取正则在「(」处不停 ⇒ 名字带括号内容;② 06 正文 A 段是 列表项、SKILL.md 却没编号 ⇒ 两边都只抓到 16 条。修完口径后三态齐全(基线绿/写简写则红并精确报出 #13/复原绿)。 验收:全量自测 PASS 113 / FAIL 0;体检 fail 0 / warn 1 / ok 15;manifest 82 份;install.py --verify 全绿; 05 = 95 行、06 = 120 行(均在一页纸内)。
This commit is contained in:
1 parent
ea02f186a5
commit
24a644f57b
4 files changed
+48
-6
No files matched your search
@@ -476,10 +476,10 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
|||||||
**⑨ 我要优化技能本身**(用户说「**优化技能**」「**技能怎么改更好**」「**梳理技能**」「**梳理一下技能的要求和描述**」「**技能太长**」「**这条规则写在哪**」「**这个技能能不能拷到别的机器用**」——任一句即触发)⇒ 读 **`references/06-技能优化规程.md`**(2026-10-15 立)。
|
**⑨ 我要优化技能本身**(用户说「**优化技能**」「**技能怎么改更好**」「**梳理技能**」「**梳理一下技能的要求和描述**」「**技能太长**」「**这条规则写在哪**」「**这个技能能不能拷到别的机器用**」——任一句即触发)⇒ 读 **`references/06-技能优化规程.md`**(2026-10-15 立)。
|
||||||
**一句话判据**:**写技能时,假设读者是"另一台机器上的另一个会话"** —— 拿它回放一遍,毛病自己浮出来。
|
**一句话判据**:**写技能时,假设读者是"另一台机器上的另一个会话"** —— 拿它回放一遍,毛病自己浮出来。
|
||||||
**三层,按 B → C → D 这个顺序做**(层名与文末总表对齐;**环境配置 A 层另属一份规范,只给指针**):
|
**三层,按 B → C → D 这个顺序做**(层名与文末总表对齐;**环境配置 A 层另属一份规范,只给指针**):
|
||||||
· **A 技能环境配置**(换机器能不能活)—— 配置外置 / 不写死本机 / 本机生成契约不入库 / 路径形态统一 / 入仓按白名单。
|
· **A 技能环境配置**(换机器能不能活)—— #1 配置外置 / #2 不写死本机 / #3 本机生成契约不入库 / #4 路径形态统一 / #5 入仓按白名单。
|
||||||
🔴 判据正本=`SKILL.md §0` 的「包内目录怎么分」+「路径一律用相对」+ 十一条禁令第 11 条 + 仓根 `.gitignore`;06 里**不复述**。
|
🔴 判据正本=`SKILL.md §0` 的「包内目录怎么分」+「路径一律用相对」+ 十一条禁令第 11 条 + 仓根 `.gitignore`;06 里**不复述**。
|
||||||
· **B 结构层**(结构清晰·重点突出·无冲突·边界清晰)—— #6 单一真源 #7 注入面与真源同源(🔴 每轮注入的面**改文字必须量长度**)#8 命名一致 #9 正文不自相矛盾。
|
· **B 结构层**(结构清晰·重点突出·无冲突·边界清晰)—— #6 单一真源 #7 注入面与真源同源(🔴 每轮注入的面**改文字必须量长度**)#8 命名一致 #9 正文不自相矛盾。
|
||||||
· **C 流程层**(流程顺畅·功能正常)—— #10 步骤顺序 #11 编号连续 #12 无跳步 #13 职责不越界 #14 字段归属 #15 上下游不断裂 #16 引用路径 #17 字段不缺失 #18 产物链完整(**P0**)。
|
· **C 流程层**(流程顺畅·功能正常)—— #10 步骤顺序正确 #11 编号连续 #12 无跳步 #13 步骤间职责不越界 #14 字段归属正确 #15 上下游不断裂 #16 引用路径正确 #17 字段不缺失 #18 产物链完整(**P0**)。
|
||||||
· **D 表述层**(简洁·高效·实用·无歧义)—— #19 肯定表述(正本 ⇒ `references/rules.md §9`)#20 说人话 #21 一页纸。
|
· **D 表述层**(简洁·高效·实用·无歧义)—— #19 肯定表述(正本 ⇒ `references/rules.md §9`)#20 说人话 #21 一页纸。
|
||||||
🔴 **优先级**:B 结构 > C 流程 > D 表述 —— 前两层出毛病**机制失效或断链**,表述只是**效果差**。
|
🔴 **优先级**:B 结构 > C 流程 > D 表述 —— 前两层出毛病**机制失效或断链**,表述只是**效果差**。
|
||||||
🔴 **目标(用户 2026-10-15 原话)**:让技能描述**结构清晰·重点突出·简洁·高效·实用·无歧义·流程顺畅·功能正常·规则边界清晰·无冲突**。
|
🔴 **目标(用户 2026-10-15 原话)**:让技能描述**结构清晰·重点突出·简洁·高效·实用·无歧义·流程顺畅·功能正常·规则边界清晰·无冲突**。
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
⛔ 别只列"看起来像技能"的 —— 散件正是"乱"的来源。
|
⛔ 别只列"看起来像技能"的 —— 散件正是"乱"的来源。
|
||||||
|
|
||||||
**② 判"在用 / 没用"**
|
**② 判"在用 / 没用"**
|
||||||
判据=**实际被加载过几次**,数据来自会话转录(宿主库**没有**技能使用记录表)。
|
判据=**实际被加载过几次**,数据来自会话转录(**WorkBuddy 本体的库**里**没有**技能使用记录表)。
|
||||||
- 扫 `<配置根>/projects/**/*.jsonl`;指纹用**逐个技能名精确匹配**(注意转义形态)。
|
- 扫 `<配置根>/projects/**/*.jsonl`;指纹用**逐个技能名精确匹配**(注意转义形态)。
|
||||||
- 🔴 **先跑自证样本**(见上);再出读数。
|
- 🔴 **先跑自证样本**(见上);再出读数。
|
||||||
- 分档给出:在用 / 从未加载且装得早 / 从未加载但装得晚(证据不足)。
|
- 分档给出:在用 / 从未加载且装得早 / 从未加载但装得晚(证据不足)。
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
**⑨ 正文有没有自相矛盾**
|
**⑨ 正文有没有自相矛盾**
|
||||||
读数:同一概念在各篇出现的位置与写法,成对列出。
|
读数:同一概念在各篇出现的位置与写法,成对列出。
|
||||||
🔴 判据 ⇒ 06 的 **B⑨**;同一件事散在多处的,收敛口径见 06 的 **B⑥**。
|
🔴 判据 ⇒ 06 的 **#9**;同一件事散在多处的,收敛口径见 06 的 **#6**。
|
||||||
|
|
||||||
**⑩ 有没有多份副本**
|
**⑩ 有没有多份副本**
|
||||||
同一技能存在 ≥2 份 ⇒ 定"唯一形态",其余归档(留取回路径,⛔ 不直删)。
|
同一技能存在 ≥2 份 ⇒ 定"唯一形态",其余归档(留取回路径,⛔ 不直删)。
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
- **1 配置外置** ⇒ `SKILL.md §0`「包内目录怎么分」(用户 2026-10-11 令:「脚本是脚本 配置是配置」)
|
- **1 配置外置** ⇒ `SKILL.md §0`「包内目录怎么分」(用户 2026-10-11 令:「脚本是脚本 配置是配置」)
|
||||||
- **2 不写死本机** ⇒ `SKILL.md §0`「路径一律用相对」+ 十一条禁令第 11 条(2026-10-14 用户令)
|
- **2 不写死本机** ⇒ `SKILL.md §0`「路径一律用相对」+ 十一条禁令第 11 条(2026-10-14 用户令)
|
||||||
- **3 本机生成契约不入库** ⇒ 同「包内目录怎么分」(`env/roots.env` 本机生成、不入库;入仓的只有 `*.example`)
|
- **3 本机生成契约不入库** ⇒ 同「包内目录怎么分」
|
||||||
- **4 路径形态统一** ⇒ `SKILL.md §0`「例外只有一类:跨根引用」
|
- **4 路径形态统一** ⇒ `SKILL.md §0`「例外只有一类:跨根引用」
|
||||||
- **5 入仓按白名单** ⇒ 仓根 `.gitignore` 的注释块(用户 2026-10-09 令)
|
- **5 入仓按白名单** ⇒ 仓根 `.gitignore` 的注释块(用户 2026-10-09 令)
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
| 12 | C 流程 | 无跳步 | 见 §C #12 | 产物链 5→6→7 跳了一步 |
|
| 12 | C 流程 | 无跳步 | 见 §C #12 | 产物链 5→6→7 跳了一步 |
|
||||||
| 13 | C 流程 | 步骤间职责不越界 | 见 §C #13 | 后一棒把前一棒的场次表+情绪卡全塞进去 |
|
| 13 | C 流程 | 步骤间职责不越界 | 见 §C #13 | 后一棒把前一棒的场次表+情绪卡全塞进去 |
|
||||||
| 14 | C 流程 | 字段归属正确 | 见 §C #14 | 情绪设计卡标成后一棒,实际是前一棒 |
|
| 14 | C 流程 | 字段归属正确 | 见 §C #14 | 情绪设计卡标成后一棒,实际是前一棒 |
|
||||||
| 15 | C 流程 | 上游→下游不断裂 | 见 §C #15 | 「目标体感」字段后两棒都没引用 |
|
| 15 | C 流程 | 上下游不断裂 | 见 §C #15 | 「目标体感」字段后两棒都没引用 |
|
||||||
| 16 | C 流程 | 引用路径正确 | 见 §C #16 | 素材库误走直接路径,应走知识库间接引用 |
|
| 16 | C 流程 | 引用路径正确 | 见 §C #16 | 素材库误走直接路径,应走知识库间接引用 |
|
||||||
| 17 | C 流程 | 字段不缺失 | 见 §C #17 | 某步输入缺「框架方案」 |
|
| 17 | C 流程 | 字段不缺失 | 见 §C #17 | 某步输入缺「框架方案」 |
|
||||||
| 18 | C 流程 | 产物链完整 | 见 §C #18(**P0**) | 只在对话里输出、没落盘 |
|
| 18 | C 流程 | 产物链完整 | 见 §C #18(**P0**) | 只在对话里输出、没落盘 |
|
||||||
|
|||||||
@@ -7920,5 +7920,47 @@ def t_term_table_single_source():
|
|||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
@case("🔴 06 的 21 条条目名:SKILL.md §0 ⑨ 与 06 正文/总表三方逐条同名(⛔ 写成简写=对不上)")
|
||||||
|
def t_skill06_entries_same_source():
|
||||||
|
"""🔴 2026-10-15 立(当日实测踩到)。
|
||||||
|
|
||||||
|
`SKILL.md §0 ⑨` 是**匹配面**(点开技能就读到),`06` 正文与总表是**真源**。
|
||||||
|
实测:§0 把 C 层写成简写「职责不越界」,而正文是「步骤间职责不越界」——
|
||||||
|
两边都不报错,读者按简写去正文里搜就搜不到。
|
||||||
|
⇒ 判据落在**21 条逐条同名**上(数字 + 名字都要对上)。
|
||||||
|
"""
|
||||||
|
import re as _re
|
||||||
|
SK = (HERE.parent / "SKILL.md").read_text(encoding="utf-8", errors="replace")
|
||||||
|
P6 = (HERE.parent / "references" / "06-技能优化规程.md").read_text(
|
||||||
|
encoding="utf-8", errors="replace")
|
||||||
|
|
||||||
|
i = SK.find("**⑨ 我要优化技能本身**")
|
||||||
|
j = SK.find("\n\n", i) if i >= 0 else -1
|
||||||
|
blk = SK[i:j] if i >= 0 and j > i else ""
|
||||||
|
a = {int(n): nm for n, nm in _re.findall(r"#(\d{1,2}) ([^(\s]+)", blk)}
|
||||||
|
b = {int(n): nm for n, nm in _re.findall(r"^(?:- )?\*\*(\d{1,2}) ([^(\s]+)\*\*", P6, _re.M)}
|
||||||
|
c = {int(n): nm for n, nm in _re.findall(
|
||||||
|
r"^\| (\d{1,2}) \| [A-D] [^|]*\| ([^|\s]+) \|", P6, _re.M)}
|
||||||
|
|
||||||
|
# 🔴 句末标点不算差异(§0 是句子、正文是标题、「配置外置 /」后面跟分隔符)——
|
||||||
|
# 2026-10-15 实测:不清洗时 #5 会因「入仓按白名单。」多一个句号而报红,那是**假红**。
|
||||||
|
def _clean(d):
|
||||||
|
return {k: _re.sub(r"[。.,,、;;//]+$", "", v) for k, v in d.items()}
|
||||||
|
|
||||||
|
a, b, c = _clean(a), _clean(b), _clean(c)
|
||||||
|
|
||||||
|
rows = [("§0 ⑨ 读到条目名 %d 条(应 21)" % len(a), len(a) == 21),
|
||||||
|
("06 正文读到条目名 %d 条(应 21)" % len(b), len(b) == 21),
|
||||||
|
("06 总表读到条目名 %d 条(应 21)" % len(c), len(c) == 21)]
|
||||||
|
for tag, other in (("06 正文", b), ("06 总表", c)):
|
||||||
|
bad = sorted(k for k in set(a) | set(other) if a.get(k) != other.get(k))
|
||||||
|
detail = ""
|
||||||
|
if bad:
|
||||||
|
k0 = bad[0]
|
||||||
|
detail = "(⛔ 首处不一致 #%d:§0=%r/%s=%r)" % (k0, a.get(k0), tag, other.get(k0))
|
||||||
|
rows.append(("§0 ⑨ 与 %s **21 条逐条同名**%s" % (tag, detail), not bad))
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
Reference in new issue
Block a user