# 接续包 · 引用与技能纠偏 > **工作区**:`E:\ProgramData\AIProject\aliyun-dsh-server` > **线名**:引用与技能纠偏线(承接「文档库结构治理」线的收官成果) > **建包**:2026-09-24 08:2x **建包会话**:`整理收官1` > **本包地位**:本线**唯一依据**。开工先读 §5(动作序列),§4 只读不动。 --- ## §0 一页速览 | 项 | 内容 | |---|---| | **目标** | 把「引用 / 技能 / 规则」三类面修到**全部正常**;规则已绿,本棒只修**引用**与**技能**两类 | | **病根 1** | 工作区 09-23 20:12 由 `AI技能\` 改名 `AIProject\` ⇒ **153 文件**仍写旧路径 | | **病根 2** | 09-24 06:0x「文档库目录加序号前缀」批量改名**在 `08-skills/**` 内过度替换** ⇒ 库 ↔ 本机 **8 技能 / 16 文件**不一致 | | **本棒范围** | 只改「必改」档(工作区 15 件 + 文档库 15 件);历史件一律不动 | | **验收** | 文档库自检四件套 rc=0 + 双端对账 289/289 + 技能三处归一化 md5 **12/12 全同** + 「必改」档旧路径残留 **0** | | **体检报告** | `交付物/引用技能规则-体检报告-20260924.md`(本包的证据来源,冲突以本包为准) | --- ## §1 开工四步(顺序不可换) 1. **跑状态**:`"E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" "E:/ProgramData/AIProject/aliyun-dsh-server/state.py"` ⇒ 只读**本线**那段;跑完之前 ⛔ 不许 Glob/Grep 全库摸底。 2. **校验本包口径**:`md5sum 接续包_引用与技能纠偏_20260924.md` 必须 = **automation prompt 里给出的那个值**(本包**不自述 md5** —— 自述即自指,写进去就变;校验值一律放 prompt 与 automation 记忆)。 不符 ⇒ 停手报告「口径已更新,需重新接续」。 3. **抢锁**(先判定再抢): ``` bash D:/github/dsh_shenxian/dsh-server-docs/07-scripts/handoff-guard.sh --claim-exec "<你的会话名>" \ --domains "dsh-server-docs/08-skills" "dsh-server-docs/01-规范" "dsh-server-docs/07-scripts" "dsh-server-docs/INDEX.md" ``` ⚠️ 动文档库**与走哪个工具无关** —— 即使只用 Edit / Write 也要先抢到锁。 💡 若判定当日已有会话在同域开工而抢不到 ⇒ **先做 §5-A(工作区侧,不占文档库锁)**,把不冲突的部分做完,最后一次性报告。 4. **读库内 `CODEBUDDY.md` 的「文档库结构与命名规则」章**(违反即返工)。 --- ## §2 病根与判据(两条,必须分清) ### 判据 A —— 旧的**工作区根**路径 **旧**:`E:\ProgramData\AI技能\aliyun-dsh-server`(及兄弟 `_tools` / `dsh-ai1net-github` / `dsh-ai1net-capability` / `_skill_归档_去AI味_20260920`) **新**:`E:\ProgramData\AIProject\…`(同名同级,仅顶层目录名变) **实测**:`E:\ProgramData\AI技能` **GONE**;`E:\ProgramData\AIProject` **EXIST**(mtime 09-23 20:12)。 ### 判据 B —— **过度替换**(本条最易误判) 09-24 06:0x 的批量改名是 **纯子串替换**,把**不属于文档库**的通用目录名也加了序号前缀: | 目标属谁 | 正确写法 | 被误改成 | |---|---|---| | 文档库自己 | `07-scripts/` `08-skills/` `01-规范/` `05-交接单/` | ✅ 正确 | | **平台代码仓** `D:\github\dsh_shenxian\` | `scripts/` | ❌ `07-scripts/` | | **用户级技能目录** `E:\ProgramData\.workbuddy\` | `skills/` | ❌ `08-skills/` | | **技能自身**(如 `短视频工作台/scripts/…`,第三方技能库) | `scripts/` | ❌ `07-scripts/` | | **API / URL 路径** | `/api/skills/shared` | ❌ `/api/08-skills/shared` | | 别的项目的约定目录名 | `规范/` `交接单/` | ❌ `01-规范/` `05-交接单/` | **决定性证据(存档,勿重做)**: | 库侧(错) | 本机侧(对) | 探针结果 | |---|---|---| | `bash 07-scripts/install-egress-guard.sh` | `bash scripts/install-egress-guard.sh` | 脚本实体在 `D:\github\dsh_shenxian\scripts\install-egress-guard.sh`;文档库 `07-scripts/` 下**无此文件** ⇒ 本机对 | | `~/.workbuddy/08-skills/` | `~/.workbuddy/skills/` | 实测真实目录 = `E:\ProgramData\.workbuddy\skills\` ⇒ 本机对 | | `/api/08-skills/shared` | `/api/skills/shared` | 09-24 06:4x 已修过同类 1 处(`src/host/skills/plugin.ts`)⇒ 同一 bug 的漏网 | 🔴 **判据 = 「这条路径的目标到底属谁」** —— **不是**看哪边"更新"。 --- ## §3 现成证据(⛔ 别重做,直接用) ### 3.1 旧路径影响面(`grep -rl "AI技能"`) | 位置 | 件数 | 处置 | |---|---|---| | 工作区 `.workbuddy/tools/**` | 4 | 🔴 改(脚本常量) | | 工作区 `.workbuddy/待落地/**` | 2 | 🔴 改 | | 工作区根 `CODEBUDDY.md` `README.md` 3 接续入口 1 接续包 | 6 | 🔴 改 | | 工作区 `交付物/**` | 7 | 2 件改(`插件建库权限-一次性执行.sh` 等可执行件)/5 件档案不改 | | 工作区 `docs/覆盖网络/**` | 2 | 🔴 改(活参数表 + 活跃方案) | | 工作区 `docs/会话与接续|插件与平台|调研与审计/**` | 5 | ⛔ 不改(09-16/09-10 证据件,改了等于伪造证据) | | 工作区 `.workbuddy/memory/**` | 45 | ⛔ 不改(append-only) | | 工作区 `归档/**` `.workbuddy/session-sync/**` `*.log` `backups/*.db` | 34 | ⛔ 不改 | | 文档库 `08-skills/**` | 8 | 🔴 改(命令模板 + 脚本常量) | | 文档库 `01-规范/**` | 3 | 🔴 改(规范正文) | | 文档库 `07-scripts/**` | 4 | 🔴 改(docstring / 注释,应对齐) | | 文档库 `INDEX.md` `BRIEF.md` | 2 | 🔴 改 | | 文档库 `05-交接单/**` | 21 | ⛔ 不改(正文不回改) | | 文档库 `04-调整方案/**` | 8 | ⛔ 不改(过程档案不回改) | | 本包 + `交付物/引用技能规则-体检报告-20260924.md` | 2 | ⛔ 不改(正文里 `AI技能` 是**旧名的叙述**,不是待执行路径) | > 🔎 **验收口径**:§5-C 第 1 条「必改档残留 0」**不含**上表 ⛔ 档,也不含本包与体检报告这份「叙述旧名」的两件 —— 统计时请用 §3.1 的逐条清单,⛔ 别用 `grep -rl` 的全量计数(全量必然不是 0)。 ### 3.2 技能库 ↔ 本机 差异(8 技能 / 16 文件,**库侧全部较新 = 09-24 06:0x**) ``` agent-operating-rules/SKILL.md, references/02-工作区纪律.md, references/03-多棒接力编排.md dsh-auto-handoff-chain/SKILL.md dsh-change-workflow/references/03-沙箱与技能机制.md, 05-插件与数据源口径.md, 06-实例可见面与共享边界.md, 08-浏览器验证栈详解.md dsh-decision-method/references/素材库-A-AI推理.md, 素材库-U-用户决策.md dsh-desktop-dev-shell/SKILL.md dsh-env-bootstrap/SKILL.md, scripts/resident-rules.py dsh-knowledge-upkeep/references/10-技能重组-千行技能拆分.md dsh-opensource-release/references/01-保留移除与脱敏口径.md, 03-实测坑.md ``` ✅ 全同(不动):`dsh-architecture-lifecycle` `dsh-feature-first` `dsh-instance-diagnose` `dsh-plugin-diagnose` **复算命令**(一行,勿手写替代): ```bash "E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" - <<'PY' import os,hashlib L=r"D:/github/dsh_shenxian/dsh-server-docs/08-skills"; H=r"E:/ProgramData/.workbuddy/skills" def t(r): d={} for dp,_,fs in os.walk(r): for f in fs: p=os.path.join(dp,f); d[os.path.relpath(p,r).replace('\\','/')]=hashlib.md5(open(p,'rb').read().replace(b'\r\n',b'\n')).hexdigest() return d for n in sorted(x for x in os.listdir(L) if os.path.isdir(os.path.join(L,x))): a,b=t(os.path.join(L,n)),t(os.path.join(H,n)) bad=[k for k in set(a)&set(b) if a[k]!=b[k]] print(("✅" if not bad and set(a)==set(b) else "⚠️"),n,len(bad)) PY ``` ### 3.3 技能内容本身也过时 2 条(与改名无关,顺手一起收敛) | 位置 | 现写 | 应为(判据 = 实测 `sessions.cwd`) | |---|---|---| | `dsh-auto-handoff-chain/SKILL.md` §⑤ | 「⛔ 只写**反斜杠+大写盘符**」 | 09-24 代码级实测:去重键 = `path.trim().toLowerCase()`(**只小写、不统一斜杠**)⇒ 正解 = `E:/ProgramData/AIProject/aliyun-dsh-server`(**正斜杠**) | | 同文件 §⑤ 判据行 | `python "E:/ProgramData/AI技能/aliyun-dsh-server/state.py"` | 旧路径,且与本文件上一行「反斜杠」自相矛盾 ⇒ 一并改 | ⚠️ 本条与工作区 `MEMORY.md` 状态层已一致(MEMORY 已是新口径)⇒ **要改的是技能,不是 MEMORY**。 --- ## §4 只报告不动(本棒不改) - 工作区根 4 条接续入口 + 2 份接续包的**内容质量**(是否有过时结论)—— 只登记,不改。 - `05-交接单/**` `04-调整方案/**` 内旧路径 —— 按「正文不回改」纪律,只统计不回改。 - 服务器 `/opt/dsh/docs` 侧:本棒**不动服务器**(双端对账保持 289/289 即可);若 §5-B 改了库而需要推镜像,**只报不改**,另排一棒。 --- ## §5 动作序列(本棒唯一要做的) ### A. 工作区侧(不占文档库锁,可先做) 1. **A1 旧路径** —— 对 §3.1 表中标 🔴 的**工作区**条目(约 15 件)做 `AI技能` → `AIProject`: ⚠️ 只替换**路径字面**;同文件里若出现「AI技能」是**目录名连字符化示例**(如 `extract-user-voice.py` 注释里的 `e-ProgramData-AI技能-…`)要**一并对齐**到新名(转录目录名会随工作区改名而变)。 ⚠️ **逐文件落盘后立刻回读**(`grep -c "AI技能"` 应为 0)。 2. **A2 单点验证再推广** —— 先取 **1 个**对象(建议 `README.md`)改完 → 回读 → 确认无副作用,再批量。 3. **A3 收口回读** —— `grep -rl "AI技能" <工作区>` 应只剩 §3.1 标 ⛔ 的位置。 ### B. 文档库侧(**先抢到锁**) 1. **B1 引用纠偏(必改档 15 件)** —— 用 §3.1 清单,同 A1 的替换与回读纪律。 ⚠️ 改 `08-skills/dsh-opensource-release/**` 时注意:其工作根 `E:\ProgramData\AIProject\dsh-ai1net-github\` 被 **5 个工具脚本常量**引用(`_build_export.py:13` `OUT` / `_verify_tsc.mjs:5` `EX` / `_sop_check.mjs:5` `_upload_audit.mjs:5` `_verify_all.mjs:5` `W`)⇒ 改文档前**先核实这 5 处常量现状**,若它们仍指旧路径则一并对齐(那属于别的线,**只报不动**)。 2. **B2 过度替换回改(§2 判据 B)** —— 对 §3.2 的 16 个文件,**逐条**判定: - 目标属文档库 ⇒ **库侧正确** ⇒ 记入「需同步到本机」清单 - 目标属平台仓 / 用户级技能目录 / 技能自身 / API ⇒ **库侧错** ⇒ **回改成原字面** 取证方式 = **存在性探针**(`ls` 目标路径)+ `git log -p` 看 09-24 06:0x 那次改动的原文: ```bash cd D:/github/dsh_shenxian/dsh-server-docs && git log --oneline -8 -- 08-skills ``` 3. **B3 技能三处同步** —— B2 定完方向后:库 → 本机(`E:\ProgramData\.workbuddy\skills`)→ 服务器(`/opt/dsh/docs/08-skills`)。 ⚠️ 服务器侧**本棒只报不改**(见 §4);若要同步,先确认是否已有他线在推。 4. **B4 技能内容过时 2 条** —— 按 §3.3 改 `dsh-auto-handoff-chain/SKILL.md`。 ### C. 收口(必做) 1. `grep -rc "AI技能"` 复核 → 必改档残留 **0**。 2. 技能复算(§3.2 命令)→ **12/12 且 0 差异**。 3. 文档库自检四件套 + 对账: ```bash cd D:/github/dsh_shenxian/dsh-server-docs for s in docs-consistency.py docs-audit.py docs-archive-index.py handoff-status.py; do "E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" "07-scripts/$s" >/dev/null 2>&1; echo "$s rc=$?"; done bash 07-scripts/docs-sync-check.sh | tail -6 ``` 期望:四个 rc=0 + 双端 289/289。 4. **释放锁**:`handoff-guard.sh --release-exec` 5. 追加本包 §6 执行记录;工作区侧改动可 commit(**文档库侧 ⛔ 未获授权不 commit / 不 push**)。 --- ## §6 执行记录(各棒追加) - **2026-09-24 08:2x|建包棒(会话 `整理收官1`)** —— 只做体检与建包,不落修复。产出:`交付物/引用技能规则-体检报告-20260924.md` 本包。规则已绿(四件套 rc=0 + 对账 289/289);引用与技能各 1 类缺陷已定位到判据与逐文件清单。 - **2026-09-24 08:1x–08:5x|执行棒(会话 `引用纠偏1`)** —— §5 全做完,锁已释放。 **① 开工四步**:`state.py` ✅|本包 md5 = `ab17bde7bb65782d10be7d122546a8c5` **相符** ✅|抢锁成功(4 域:`08-skills` / `01-规范` / `07-scripts` / `INDEX.md`)✅|库内 `CODEBUDDY.md` 「文档库结构与命名规则」章已读 ✅。 **② A 工作区侧(16 件,逐文件)**:`CODEBUDDY.md`|`README.md`|`接续入口_IM线` (12 处)|`接续入口_技能重组线` (2)|`接续入口_插件投放与分库线` (1)|`接续包_文档库治理_20260923.md` (2)|`.workbuddy/tools/{find-session-by-title,guard-replay,sess-credit-report}.py + relay-transfer.sh` (含连字符化转录目录名 `e-ProgramData-AI技能-…` 一并对齐)|`.workbuddy/待落地/{verify-stop-hook.py,重启后待办.md}`|`docs/覆盖网络/{参数表,设备登录接入方案}`|`交付物/{插件建库权限-一次性执行.sh, DB修复-workbuddy.db损坏诊断与方案}.md` ⇒ **该 16 件 `grep -c "AI技能"` 全 = 0**;单点验证先做 `README.md` 再推广。 ⚠️ **口径与 §3.1 的两处差异(以实测为准)**:ⓐ 工作区「必改档」实测 **16 件**(§3.1 写 12 件,未含 `docs/覆盖网络` 2 + `交付物` 2);ⓑ `交付物/**` 实测 9 件含旧路径(非 7),按「含可执行命令者改」判 **2 件改 / 7 件不改**(不改的含体检报告本身)。 **③ B 文档库侧**: - **B1 引用纠偏**:`08-skills` 8 + `07-scripts` 4 + `01-规范` 2(`01-规划与架构.md` 改到现真源 `D:/github/dsh_shenxian/dsh-server-docs/`;`06-工作台UI规范.md` 3 处)+ `INDEX.md` + `BRIEF.md` = **16 件落地**。 - **B2 过度替换回改**:逐条按「目标属谁」判 + 存在性探针。**库侧错 ⇒ 回改 12 件**:`/api/skills/{shared,mine}`、`~/.workbuddy/08-skills/`、`DSH_HOME` 的 `skills/`、`presets/

/skills/`、技能自身 `scripts/`(`短视频工作台`/`split_skill.py`/`chain_report.py`/`resident-rules.py`)、官方仓 `native/system/scripts/`+`apps/desktop/scripts/`、**平台仓** `scripts/`(探针:`install-egress-guard.sh`/`install-python-runtime.sh`/`install-shared-tools.sh`/`runtime-baseline.cjs`/`verify-inject.cjs`/`verify-dsh-install.mjs` **全部只在 `D:\github\dsh_shenxian\scripts\`**)。**库侧对 ⇒ 补到本机 4 件**:`05-交接单/`、`01-规范/06-工作台UI规范`、`bash 07-scripts/handoff-guard.sh`、`07-scripts/extract-user-voice.py`(探针:`handoff-guard.sh` 只在文档库 `07-scripts/`)。 - **B3 三处同步**:本机 `~/.workbuddy/skills` ↔ 库 `08-skills` **12/12 md5 全同 · 0 差异**(方向 = 本机为工作副本 ⇒ 推库,符合库内 README 的「单向推进 本机 → 此处」口径;库侧 06:0x 那批改动内容上仅「改名」一处,未丢内容;`dsh-auto-handoff-chain` 库侧为 09-21 旧版 ⇒ 以本机 09-23 新版为准)。**服务器 `/opt/dsh/docs/08-skills` 按 §4 只报不改**。 - **B4 技能内容 2 条**:`dsh-auto-handoff-chain/SKILL.md` 律⑤ 改为「**只写与手动开会话 cwd 逐字同形;判据 = 实测 `sessions.cwd`;当前正解 = `E:/ProgramData/AIProject/aliyun-dsh-server`(正斜杠)**」+ 标题行/判据行/自查行 + 🔴 **frontmatter `description` 同步改**(依据该文件自身「教训二:改路径字面必须枚举全部复制面,漏 `description` ⇒ 曝光度最高」);§⑤ 判据行命令路径同步 `AI技能`→`AIProject`。`version` 未动(仍 1.7.2)。 **④ C 收口**:四件套 **rc=0 ×4** ✅|技能复算 **12/12 · 0 差异** ✅|旧路径「活路径」残留 **0**;**保留 12 处历史叙述**(`dsh-auto-handoff-chain` 6:污染源/迁移对照/连字符化示例|`dsh-opensource-release/SKILL.md` 2:frontmatter 版本历史 + 用户原话引用|`dsh-change-workflow/references/00-平台速查.md` 1:勘误引述旧文|`01-规范/03-路线图与待办.md` 3:历史迁移条目)—— 判据 = 「照着做会失败的活路径」改、「记录当时事实」不改。🔴 **对账 = 文件数 289/289 一致,但内容 263/289**(**26 件不一致 = 本次改库而按 §4 未推服务器的必然结果**)。锁已 `--release-exec` 释放。 ⚠️ **本棒不改、只报(§4)**:ⓐ 推镜像 26 件到 `/opt/dsh/docs`(清单见对账输出)ⓑ **`E:\ProgramData\AIProject\dsh-ai1net-github\` 5 常量 + 1 命令模板仍指旧根**(`_build_export.py:14,763`|`_verify_tsc.mjs:5`|`_sop_check.mjs:5`|`_upload_audit.mjs:5`|`_verify_all.mjs:5`)⇒ 旧根已 GONE、**这些脚本现已失效**,属别的线 ⓒ 服务器 `08-skills` 落后本机一版。 🔧 **工具教训(可复用)**:改同一文件的多处字符串时,**必须先把所有替换聚合到内存再一次写盘** —— 逐条 `open(...,"wb")` 会让后一条覆盖前一条(本轮首跑即踩,52 项写入只生效每文件最后一项,靠 `12/12` 复算才发现)。配套:命中数断言 + 幂等(`count==0 且新串已在` ⇒ 跳过重跑)。 - **2026-09-24 08:35–08:5x|执行棒补修(同会话 `引用纠偏1`;用户令「需要修改的地方都修改」⇒ 上一轮标「只报不改」的两项解禁)** - **① 推镜像到服务器**(原 §4「服务器只报不改」):26 件(`08-skills` 20 + `07-scripts` 4 + `01-规范` 2 + `INDEX.md`/`BRIEF.md`)用 **`ssh bt-server "cat > <目标>"`**(不动服务器侧属性)推送 ⇒ **对账 289/289 · 双端一致 ✅**(原 263/289、26 件不一致);**服务器侧权限经实证保持 `root:root 600`**(`ls -l` = `-rw------- 1 root root`)。 - **② `dsh-ai1net-github` 开源工作根旧根常量**(原标「属别的线,只报不动」):`AI技能`→`AIProject`,**范围判据 = 可执行脚本 + json 配置**(`.py/.mjs/.js/.cjs/.sh/.json`)⇒ 落地 **54 文件 / 57 处**,含 5 个工作根常量(`_build_export.py:14` `OUT`|`_verify_tsc.mjs:5` `EX`|`_sop_check.mjs:5` / `_upload_audit.mjs:5` / `_verify_all.mjs:5` `W`)+ `_build_export.py` 命令模板;`.md`(台账 / 评估 / README)与该根 `.workbuddy/memory/**` **按叙述件纪律不动**。复核:该根脚本/json 内 `AI技能` 残留 **0**,六个关键常量全部指向 `E:\ProgramData\AIProject\dsh-ai1net-github`。 - ⚠️ **副作用披露**:上述扫描覆盖到该根 `_中间产物_待清理/**`(临时脚本)与 `_archify/evidence/*.visual-check.json`(取证 json,属待清理件)—— 已一并改;该根 `.md` 里仍有旧根字面(未动),留该线自理。 - **三处同步闭合**:本机 `~/.workbuddy/skills` → 库 `08-skills` → 服务器 `/opt/dsh/docs/08-skills` 逐字一致(服务器残留复核 = 与库同 9 处历史叙述)。