记忆:补记「技能根绝对路径清零」
用户令:「SKILL.md:189 判据源写 E:/ProgramData/.workbuddy/skills/ 严格禁止技能中写这里绝对路径(除非跨根目录因引用),跨环境全部报错」 判据:技能根(本包自己 + 同根技能)一律不写绝对路径; 跨根引用(工作区根 / 文档库根 / 本机安装位 / 宿主数据目录)才落到具体位置。 技能仓提交 2f65609(10 文件 · 19 增 18 删),已推送。 另 15 处在 dsh-knowledge / dsh-workflow,两包被 .gitignore 全挡且无自己的 .git ⇒ 改动不入仓。 本轮最大教训:Grep 工具(ripgrep)跳过被 ignore 的文件,第一遍扫描结论是错的; 改用 grep -r 才照出漏网的 15 处。核实"清干净没有"一律用 grep -r。
This commit is contained in:
1 parent
a83c0c0029
commit
c1707b7c97
1 file changed
+52
@@ -591,3 +591,55 @@ contentm_agent 旧 27092 → 29400 07:50:58 ✅ 读库正常
|
||||
判据=**`git check-ignore` 有没有命中** —— 命中的是运行时产物,没命中的是**该由人决定去留**的。
|
||||
- 🔴 **删前必查"它是不是活区"** —— 本轮 `supervise-inbox/`(每分钟在写)与 `supervise-bg.log`(追加中)
|
||||
都长得像"一堆老文件",实则是机制正在用的。判据=看 mtime 有没有近期变动。
|
||||
|
||||
---
|
||||
|
||||
## 第六件:技能根绝对路径清零(用户令)
|
||||
|
||||
**用户原话**:「SKILL.md:189 判据源写 E:/ProgramData/.workbuddy/skills/ 严格禁止技能中写这里绝对路径(除非跨根目录因引用),跨环境全部报错」
|
||||
|
||||
**定位过程(⚠️ 记下,因为绕了弯)**:用户只给了「SKILL.md:189」,
|
||||
但**本包(session-mechanism)的 189 行不是这个内容**(是「机制新建会话用哪个模型」)。
|
||||
⇒ 逐个技能包扫「各 SKILL.md 的第 189 行」,在 **`product-planning/SKILL.md:189`** 命中:
|
||||
「**判据来源**(单一可信源…):`humanizer`…、`humanizer-zh`…。**两份技能都在 `E:/ProgramData/.workbuddy/skills/`**」
|
||||
—— 「判据源」正是用户说的那三个字。**教训:用户给的行号 + 关键词同时指认时,先按关键词全仓找,别只认行号。**
|
||||
|
||||
**判据(用户给的两分法,全仓统一)**:
|
||||
- **技能根**(本包自己 + 同根技能)⇒ **一律不写绝对路径**,写 `<技能根>/<技能名>/`;
|
||||
- **跨根引用**(工作区根 / 文档库根 / 本机软件安装位 / 宿主数据目录)⇒ 才落到具体位置,优先读环境变量。
|
||||
|
||||
**🔴 这条推翻了昨天的口径**:session-mechanism `SKILL.md` 原写「⚠️ 文档/注释里的绝对路径**不在此列**(举例、历史取证照写 —— 那是证据)」
|
||||
⇒ 用户新令把例外**收窄到只剩「跨根引用」**,文档/注释/留痕里的**技能根**路径同样不许写。已改写该条。
|
||||
|
||||
**改了什么(进仓 10 文件 · 19 增 18 删 · 提交 `2f65609`,推送 `7a08cd3..2f65609`)**:
|
||||
- `product-planning`:`SKILL.md`(判据来源 / video-capture 位置 / 本技能位置 + **新增「路径写相对或占位」规则**)、
|
||||
`references/_留痕/SKILL-总入口-20261007改说人话前.md`、`stage-delivery/assets/video-capture/SKILL.md`、
|
||||
`scripts/check_naming.py`(注释)
|
||||
- `session-mechanism`:`SKILL.md`(反例改占位 + 例外条款改写)、`references/deploy.md`(安装目录)、
|
||||
`scripts/session-rules-check.py`(docstring)、`boards/会话看板/board-launch.py.tpl`(模板占位符)
|
||||
- `video-capture/ATTRIBUTION.md`、仓根 `改包纪律.md`(3 条 `cd` 命令)
|
||||
|
||||
**另外改了但⛔ 不入仓的(15 处)**:`dsh-knowledge`(5+1+1)、`dsh-workflow`(5+1+2)
|
||||
—— 🔴 **这两个包被 `.gitignore:9` 的 `/*` 全挡,且没有自己的 `.git`** ⇒ 改动只落在本机,不进任何仓。
|
||||
|
||||
**🔴🔴 本轮最大的坑(必记)**:**`Grep` 工具(ripgrep)默认跳过被 `.gitignore` 排除的文件** ——
|
||||
我第一遍用它扫「技能根路径」,报「No matches / 已清零」,**结论是错的**;
|
||||
改用 `grep -rn … --exclude-dir=.venv` 重扫,才照出 `dsh-knowledge` / `dsh-workflow` 里那 15 处。
|
||||
⇒ **判据:核实"某形态在技能包里清干净没有",一律用 `grep -r`,⛔ 别用会尊重 ignore 的搜索器**
|
||||
(被 ignore 的文件恰恰是"不在仓里、最容易失控"的那批)。
|
||||
|
||||
**验收**:
|
||||
- `product-planning` 命名闸门:**通过 2060 / 失败 0**
|
||||
- `session-mechanism` 全量自测:**PASS 110 / FAIL 0**(确认没有判据锚定我改写的那句例外条款)
|
||||
- 全仓 `grep -r` 反查:清零。剩余两处均属正当例外 ——
|
||||
`session-mechanism/install.log`(运行时产物,`.gitignore:32` 已 ignore)、
|
||||
`browser-harness/.venv/**/direct_url.json`(pip editable 安装元数据,改了会破坏 pip 认知)。
|
||||
- ⚠️ 编辑器把 3 个文件写成了 CRLF ⇒ 已转回 LF(**3 个文件各 260~440 处 CRLF,说明它们原本就是整文件 CRLF**,
|
||||
但 diff 未受污染 —— `.gitattributes` 的 `text eol=lf` 在比较时做了规范化,diff 仍只有我改的那几行)。
|
||||
|
||||
**沉淀(可复用)**:
|
||||
- 🔴 **"不写死路径"这条令,落地要分两个根**:**自己的根**(可推导 ⇒ 禁止写)与**别人的根**(推不出来 ⇒ 允许外置引用)。
|
||||
判据一句话:**这个根能不能从「我自己的位置」推出来**。
|
||||
- 🔴 **清一类坏形态,必须先"全量反查"再动手** —— 且反查工具的**过滤行为**本身就是变量(见上面 ripgrep 那条)。
|
||||
- 🔴 **改完规则文件要跑全量自测**:本轮改写了 SKILL.md 的例外条款,若某判据锚定那句就会恒红
|
||||
(同族坑今天已栽过两次)—— 实测未被锚定,全量 PASS 110。
|
||||
Reference in new issue
Block a user