- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次) - .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…), 目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪 - .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/) - .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*) - .gitignore 补:备份件(*.bak-*) - 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
9.6 KiB
引用 / 技能 / 规则 —— 全面体检报告
体检时间:2026-09-24 08:0x–08:2x 体检人:会话
整理收官1范围:本工作区E:\ProgramData\AIProject\aliyun-dsh-server+ 文档库D:\github\dsh_shenxian\dsh-server-docs+ 用户级技能E:\ProgramData\.workbuddy\skills结论一句话:规则正常;引用与技能各有 1 类系统性缺陷,根因都是 09-23/09-24 的两次改名。
判定(首屏)
| 维度 | 判定 | 依据 |
|---|---|---|
| 规则 | ✅ 正常 | 文档库自检四件套 rc=0/0/0/0;双端对账 289/289 一致 |
| 引用 | ❌ 不正常 | 工作区 09-23 20:12 由 AI技能\ 改名为 AIProject\,153 个文件仍写旧路径(工作区 107 + 文档库 46) |
| 技能 | ❌ 不正常 | 库 ↔ 本机 12 个技能中 8 个不一致(16 文件);根因 = 09-24 06:0x 批量改名在 08-skills/** 内过度替换 |
两处缺陷的共同特征:都不是"少改",而是"改错了地方" —— 静默生效、不做体检发现不了。
一、规则 —— ✅ 正常
| 检查 | 命令 | 结果 |
|---|---|---|
| 写死取值 / 跨页一致性 | 07-scripts/docs-consistency.py |
rc=0 · 承诺值与现行值一致 |
| 档案审计(8 项) | 07-scripts/docs-audit.py |
rc=0 · 无 P0;悬空档案号 0;无近重复 |
| 档案索引 | 07-scripts/docs-archive-index.py |
rc=0 · 档案 146 篇,表与 INDEX.md 一致 |
| 交接单状态 | 07-scripts/handoff-status.py |
rc=0 · 39 个单子,无状态 0 个 |
双端对账(本地 ↔ 服务器 /opt/dsh/docs) |
07-scripts/docs-sync-check.sh |
rc=0 · 289 / 289 一致,不一致 0 |
常驻规则文件(CODEBUDDY.md / .codebuddy/rules/*.md) |
人工核对 | 结构完整;1 处旧路径(见 §2.1) |
二、引用 —— ❌ 不正常
2.1 旧工作区路径残留(E:\ProgramData\AIProject\ → E:\ProgramData\AIProject\)
事实:E:\ProgramData\AIProject\ 已于 09-23 20:12 整体改名为 E:\ProgramData\AIProject\(ls 实测旧目录 GONE、新目录 EXIST)。兄弟目录同步改名:_tools / dsh-ai1net-github / dsh-ai1net-capability / _skill_归档_去AI味_20260920。
影响面:153 个文件(grep -rl "AI技能"):
| 位置 | 文件数 | 性质 |
|---|---|---|
工作区 .workbuddy/memory/** |
45 | 历史日志(append-only,不改) |
工作区 归档/** |
32 | 已归档过程件(不改) |
工作区 docs/** |
7 | 09-16 会话复盘副本(证据件,不改) |
工作区 交付物/** |
7 | 交付物档案(历史件) |
工作区 .workbuddy/tools/** |
4 | 🔴 可执行脚本,硬编码旧路径 ⇒ 必改 |
工作区 .workbuddy/待落地/** |
2 | 🔴 脚本 + 命令 ⇒ 必改 |
工作区根(CODEBUDDY.md README.md + 3 接续入口 + 1 接续包) |
6 | 🔴 每会话加载/开工依据 ⇒ 必改 |
工作区 .workbuddy/session-sync/** |
2 | 09-13 历史同步包(不改) |
工作区 .workbuddy/*.log backups/*.db |
2 | 日志 / DB 备份(不改) |
文档库 05-交接单/** |
21 | 历史单子(沿用「正文不回改」) |
文档库 04-调整方案/** |
8 | 过程档案(同上) |
文档库 08-skills/** |
8 | 🔴 命令模板 / 脚本常量 ⇒ 必改 |
文档库 01-规范/** |
3 | 🔴 规范正文 ⇒ 必改 |
文档库 07-scripts/** |
4 | 注释与 docstring(低危,但应对齐) |
文档库 INDEX.md BRIEF.md |
2 | 索引正文 ⇒ 应改 |
P0(功能引用,照着会失败)逐条:
| # | 文件 | 性质 |
|---|---|---|
| 1 | 工作区 CODEBUDDY.md:61 |
§2 指针里写死的 state.py 调用路径 |
| 2 | 工作区 README.md:3,98 |
落位规则首行给的工作区自述路径 |
| 3 | 工作区 .workbuddy/tools/find-session-by-title.py:58 |
转录目录名常量 e-ProgramData-AI技能-… |
| 4 | 工作区 .workbuddy/tools/guard-replay.py:14 |
PROJ 常量 |
| 5 | 工作区 .workbuddy/tools/sess-credit-report.py:16 |
PROJ 常量 |
| 6 | 工作区 .workbuddy/tools/relay-transfer.sh:8 |
中转目录常量 |
| 7 | 工作区 .workbuddy/待落地/verify-stop-hook.py:15 |
WS 常量 |
| 8 | 工作区 接续入口_IM线:377,585 / 接续入口_技能重组线:51,53 |
新会话口令与命令模板(会被逐字复制执行) |
| 9 | 文档库 08-skills/dsh-auto-handoff-chain/SKILL.md:77 |
交接棒开工命令模板 |
| 10 | 文档库 08-skills/dsh-env-bootstrap/scripts/resident-rules.py:45,70 |
DEFAULT_GOAL / 工作区根常量 |
| 11 | 文档库 08-skills/dsh-opensource-release/**(SKILL.md 7 处 + 2 references) |
开源工作根 E:\…\dsh-ai1net-github\(被 5 个工具脚本常量引用) |
| 12 | 文档库 01-规范/01-规划与架构.md 03-路线图与待办.md 06-工作台UI规范.md |
规范正文里的工作区路径 |
2.2 技能文档内的「过度替换」(09-24 06:0x 批量改名副作用)
09-24 06:0x 那次「给文档库目录加序号前缀」(scripts/→07-scripts/、skills/→08-skills/、规范/→01-规范/、交接单/→05-交接单/ …)是纯子串替换,且跑遍了 08-skills/** ⇒ 把不属于文档库的通用目录名一起改了。
决定性证据(存在性探针):
| 库侧(错) | 本机侧(对) | 实测 |
|---|---|---|
bash 07-scripts/install-egress-guard.sh |
bash scripts/install-egress-guard.sh |
该脚本在平台代码仓 D:\github\dsh_shenxian\scripts\;文档库 07-scripts/ 下没有 |
~/.workbuddy/08-skills/ |
~/.workbuddy/skills/ |
实测真实目录 = E:\ProgramData\.workbuddy\skills\ |
/api/08-skills/shared |
/api/skills/shared |
API 路径不含序号前缀(09-24 06:4x 已修过 1 处同类,是同一 bug 的漏网) |
⇒ 判据:「这条路径的目标到底属谁」 —— 属文档库 ⇒ 加前缀正确;属平台仓 / 技能自身 / 用户级技能目录 ⇒ 加前缀 = 改错了。
三、技能 —— ❌ 不正常
库 ↔ 本机 12 个技能,8 个不一致(16 个文件)(归一化 md5,\r\n→\n):
| 技能 | 异文件 | 库 mtime | 本机 mtime |
|---|---|---|---|
agent-operating-rules |
3 | 09-24 06:05 | 09-22 06:46 |
dsh-auto-handoff-chain |
1 | 09-24 06:03 | 09-23 22:02 |
dsh-change-workflow |
4 | 09-24 06:03/05 | 09-22 07:32 |
dsh-decision-method |
2 | 09-24 06:01 | 09-24 05:56 / 09-15 |
dsh-desktop-dev-shell |
1 | 09-24 06:03 | 09-22 06:46 |
dsh-env-bootstrap |
2 | 09-24 06:01/03 | 09-22 06:46 / 09-19 |
dsh-knowledge-upkeep |
1 | 09-24 06:05 | 09-22 07:48 |
dsh-opensource-release |
2 | 09-24 06:01 | 09-24 05:56 / 09-22 |
其余 4 个(dsh-architecture-lifecycle dsh-feature-first dsh-instance-diagnose dsh-plugin-diagnose) |
0 | — | ✅ 全同 |
方向判定:16 个文件全部是库侧较新(09-24 06:0x),本机侧多为 09-22 ⇒ 不是"本机有新内容没回库",而是库侧 06:0x 那次改名改出了 §2.2 的过度替换。
因此这一类的修法不是"整体同步",而是逐文件判:
① 库侧重命名正确的行 ⇒ 同步到本机(把本机 09-22 的旧目录名更新)
② 库侧过度替换的行(§2.2)⇒ 回改成原字面,⛔ 不许同步到本机
③ 本机侧新增内容(如 dsh-auto-handoff-chain 本机虽旧但 §⑤ cwds 口径已过时——见下)⇒ 按现行事实对齐
顺带发现 2 条技能内容本身已过时(与改名无关):
| 位置 | 现写 | 应为 |
|---|---|---|
dsh-auto-handoff-chain/SKILL.md §⑤ |
「⛔ 只写反斜杠+大写盘符 E:\ProgramData\AIProject\…」 |
09-24 代码级实测推翻:去重键 = path.trim().toLowerCase(),只小写、不统一斜杠 ⇒ 正解 = E:/ProgramData/AIProject/aliyun-dsh-server(正斜杠) |
| 同文件 §⑤ 判据行 | python "E:/ProgramData/AIProject/ai1net-dsh-server/state.py" |
旧路径,且与上面的「反斜杠」自相矛盾 |
⚠️ 本条与工作区 MEMORY.md 状态层打架 ⇒ 修技能时必须一并收敛到「判据 = 实测 sessions.cwd」。
四、处理(已定,交下一棒执行)
为什么不在本棒做完:两处修复合计 >160 个文件,命中「批量改动 >10 文件」红线 + 其中技能一类必须逐条判定(不可机械替换)⇒ 超出本棒上下文预算。
已定的处置口径(下一棒照此执行,不需再问):
- 旧路径:
E:\ProgramData\AIProject\→E:\ProgramData\AIProject\,只改 §2.1 表中的「必改」档(工作区 12 件 + 文档库 15 件);memory/归档/session-sync/05-交接单/04-调整方案/一律不回改(历史件与已归档正文按既有纪律不动)。 - 过度替换:逐条按「目标属谁」判(§2.2 判据),错的回改成原字面,对的同步到本机;先跑
07-scripts/docs-audit.py与存在性探针取证,再落盘。 - 技能三处同步:库 → 本机 → 服务器(
/opt/dsh/docs/08-skills),三处归一化 md5 必须 12/12 全同后才算完;同时把dsh-auto-handoff-chain§⑤ 的 cwds 口径改成实测正解。 - 验证:文档库自检四件套 rc=0 +
docs-sync-check.sh双端 289/289 + 技能 12/12 全同。 - 纪律:动文档库先抢锁(
--claim-exec,域 =05-交接单07-scripts08-skills01-规范);⛔ 未获授权不 commit / 不 push。
接续包:接续包_引用与技能纠偏_20260924.md(工作区根)