chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)

- 变更规模:新增 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/ 知识文件,按口径入库)
This commit is contained in:
admin committed 2026-10-10 23:13:22 +08:00
1 parent 30b46dbd0c
commit c1b5e4d966
735 files changed
+153192 -2415

No files matched your search

+12 -12
View File
@@ -37,7 +37,7 @@
- `D:\github\dsh_shenxian\dsh-server-docs\交接单\StoryForge插件线-序2-部署与实例验收.md`(8 段模板,**纯 LF** CR=0,`.lock-02` 原子占号)
- `交接单/README.md §一` 新增序2 一行(Edit 精确插入;行尾保持 **ALL-CRLF 168/168**,未引入混合)
- `接续入口_StoryForge插件线_20260920.md` §0 / §1 / §2 推进到「**序2 执行棒**」
- 线目录同步副本 `E:\ProgramData\AI技能\dsh-plugin-forge\交接单_StoryForge插件线-序2_部署与实例验收_20260921.md`
- 线目录同步副本 `E:\ProgramData\AIProject\dsh-plugin-forge\交接单_StoryForge插件线-序2_部署与实例验收_20260921.md`
**决定性取证(序2 执行棒必读,省一大轮探索)**:
- 🔴 **`register()` 必须用 `kind`**:`E:\github\dsh-desktop-0.1.5rc1\packages\host\webserver\lib\index.js:176-178` 实测 `const table = route.kind === "exact" ? this.exact : this.prefixes;` ⇒ 既存插件(social-workbench / voxemw-cloud)写的 `exact: true` 在本版会落**前缀表**(靠巧合生效,属既存隐患;本线不修)。
@@ -79,7 +79,7 @@
**结论**:**插件侧 100% 达成;唯一卡点 = 平台的启用链路(四条证据判定与本插件无关)**。S0–S5 全绿,S6 受阻 ⇒ 真机判据 1–4 未验。
**已落(可复现)**
- 改 **4 文件**(回滚点存**包外** `E:\ProgramData\AI技能\dsh-plugin-forge\_backup-storyforge-xu2\`):`lib/index.js` 全文重写(`export const inject=["webServer"]` + `ctx.effect(() => server.register({kind:'prefix', path:'/storyforge', handler}))`,**保留**原标记写入)|**新增** `lib/static.js`(纯函数 `planRequest` + 写响应 `serve`)|`package.json` 加 `files` + 改过期 description|`cordis.patch.yml` **仅注释**。
- 改 **4 文件**(回滚点存**包外** `E:\ProgramData\AIProject\dsh-plugin-forge\_backup-storyforge-xu2\`):`lib/index.js` 全文重写(`export const inject=["webServer"]` + `ctx.effect(() => server.register({kind:'prefix', path:'/storyforge', handler}))`,**保留**原标记写入)|**新增** `lib/static.js`(纯函数 `planRequest` + 写响应 `serve`)|`package.json` 加 `files` + 改过期 description|`cordis.patch.yml` **仅注释**。
- 本机等价验收 **`4/4 PASS` / 50 断言 0 失败 / 退出码 0**(真起 `node:http` + 调 `serve()`,非模拟):首屏 200 且**逐字节 == `dist/index.html`(4689B)**;hashed JS 200 `text/javascript` 710117B;深链 200 含 `text/html`;`sw.js` **404**。
- 包 `dsh-local-storyforge-0.1.0.tgz` = **1,754,963 B** / md5 **`dca573b57814de6c205b7be6d3772760`**;`dist/` **110** 条对齐、无 `.bak`/`node_modules` 脏条目。
- 候选池 `POST /api/plugins/business` = **200**、`ok:true`、🔴 **`blocked=0`(未触发 409、未用 `trust` 放行)**、`compat.level=unknown`(非 incompatible);池内 `_dsh-local_storyforge.tgz` **条目保留**。
@@ -121,7 +121,7 @@
**新增 4 条内核契约事实**(已写进入口 §3):`dsh.client` 与 `./client` 导出**必须成对**(否则插件树加载失败)|patch config **不支持 `${VAR}` 插值**(秘密须走运行时注入)|profile 的 `cordis.patch.yml` **必须是顶层 YAML 数组**(写 `[]`)|`reconnect` 形状公开但**实测未自愈**(55 s 窗内 0 次重连,需 ≥180 s 复测)。
**偏离(明示)**:未建 R4 临时用户,改用隔离 `DSH_HOME` + 平台同形沙箱(`setpriv` + `dsh --profile web`),唯一偏离维度 = nft `skuid` 匹配(该维度由 S2 独立判决)。
**清理**:S9 后无残留监听/进程、未建 OS 账号、`nft` 表逐字未动、`/tmp/carbon-poc` 已删;证据保留于 47 的 `/opt/dsh/poc-carbon/`;本机产物 `E:/ProgramData/AI技能/dsh-plugin-carbon/`。
**清理**:S9 后无残留监听/进程、未建 OS 账号、`nft` 表逐字未动、`/tmp/carbon-poc` 已删;证据保留于 47 的 `/opt/dsh/poc-carbon/`;本机产物 `E:/ProgramData/AIProject/dsh-plugin-carbon/`。
**未做(明示)**:S3(前提被推翻)· Phase 1 全部(门禁)· S7-② 决定性复测(窗偏短)。
**链条状态**:**⛔ 已暂停,等 §2.4 四项拍板**(含新增结构性第 4 件)⇒ **未登记下一棒**。⛔ 未 commit / 未 push。
@@ -182,7 +182,7 @@
- ⇒ 那 3 行(id 12/15/16,同属 `video_id=315`)是**迁移之后用户在 MCN 界面主动删除的**,**47 才是权威最新态**;补回 = 逆用户操作。**上一轮"迁移丢 3 行"的判断作废。**
- 处置:曾生成的补齐载荷 `rewrite_log-missing3.sql` **已删**(⛔ 勿重建);归档目录改名 `待清理/MCN-DB-本机副本归档-20260921/` 并写 `README.md`(含"3 行非漏行"的更正与证据)。
**已完成 A(可逆归档)**:`C:/Users/Administrator/.dsh/mcn-plugin.db`(4,247,552 B · mtime 09-05 18:34 · 444 行)→ `E:/ProgramData/AI技能/aliyun-dsh-server/待清理/MCN-DB-本机副本归档-20260921/mcn-plugin.db.local-20260905.bak`,`cp -p` 保留时间戳,**sha256 双向一致** `2a79a25288a66600047eab742d0c252653768c39d1e518713ea8ceb34f459e91`;⛔ **原件未移动/未删除/未改名**(仍在原位,待用户逐项确认后走回收站)。
**已完成 A(可逆归档)**:`C:/Users/Administrator/.dsh/mcn-plugin.db`(4,247,552 B · mtime 09-05 18:34 · 444 行)→ `E:/ProgramData/AIProject/ai1net-dsh-server/待清理/MCN-DB-本机副本归档-20260921/mcn-plugin.db.local-20260905.bak`,`cp -p` 保留时间戳,**sha256 双向一致** `2a79a25288a66600047eab742d0c252653768c39d1e518713ea8ceb34f459e91`;⛔ **原件未移动/未删除/未改名**(仍在原位,待用户逐项确认后走回收站)。
**Q3 答复(不同用户是否同一份数据)**:**不同用户 = 各自独立一份,数据不共享**。证据:`dsh-plugin-mcn/lib/config.js:10` = `DSH_DIR = process.env.DSH_HOME ? join(DSH_HOME,".dsh") : join(homedir(),".dsh")` ⇒ 路径锚在**该实例自己的 userRoot**;47 上 8 个用户根,**只有 `cce6d1cd…`(admin / uid 114801)**有 `home/.dsh/mcn-plugin.db`,其余用户连 `.dsh` 都还没建(未启用过)。同一用户多设备 = 同一份;实例/Worker 迁移 = 数据跟 home 走。⚠️ 档案 144 §三 A/B 的「共享只读插件层」共享的是**代码**,**数据仍各用户独立**。
@@ -239,7 +239,7 @@
- 用户在本会话末尾提出**新任务**:「**处理完毕后 按照项目新ICON的样式,改造重新拉起实例恢复会话的浮层动画**」。
⛔ 按收口纪律**未在本会话开工**(水位 304k);已产出接续包 + 登记一次性 automation 交由新会话执行。
- 接续包 = `E:\ProgramData\AI技能\aliyun-dsh-server\交接单\接续包_实例恢复浮层改造_20260921.md`(md5 见 automation prompt)。
- 接续包 = `E:\ProgramData\AIProject\ai1net-dsh-server\交接单\接续包_实例恢复浮层改造_20260921.md`(md5 见 automation prompt)。
- **本会话已探明并写入接续包的线索**(省下一棒重新探索):
- 浮层**唯一实现处** = **`assets/inject/recovery.js`**,由 `src/supervisor/proxy.ts` 的 `loadInject` 注入进 HTML(`injectRecovery()`;仅当客户端接受 HTML 且响应未压缩)。
- **DOM 契约(⛔ 改造时不许删改)**:`window.__dshRecover === 1`(执行完毕哨兵)/ `#__dshRecover` / `#__dshRetryBtn` / `#__dshAssistBar` —— `scripts/verify-inject.cjs` 与技能 `dsh-instance-diagnose` 的验收都依赖它们。
@@ -338,7 +338,7 @@
- **触发**:用户指出浮层图标不对 —— 09-21 07:5x 那棒把浮层对齐到了 `web/favicon.svg` 的三辐条 hub,**那是错源**。
真源 = **用户 2026-09-20 提供的标记**(六边形芯片 + 内置电路纹 + "AI" + 6 卫星节点 + 外圈细环 + 青紫辉光,742×742 RGBA),
已由 09-20 那轮加工成整套资产:`E:/ProgramData/AI技能/dsh-ai1net-github/_app-icon_20260920/`(tile / tile-square / transparent-glow / favicon.ico)。
已由 09-20 那轮加工成整套资产:`E:/ProgramData/AIProject/dsh-ai1net-github/_app-icon_20260920/`(tile / tile-square / transparent-glow / favicon.ico)。
- 🔴 **事实纠正(重要)**:**页面 head 早在 09-20 21:17 就已改引 `/favicon.ico` + `/favicon.png` + `/favicon-180.png`**,
线上 `web/favicon-192.png` 与昨日成品 `tile-square/icon-192.png` 相似度 **0.9944**(= 确为新标记)。
⇒ **仍挂着旧三辐条的只有两处**:`web/portal.html` 顶栏品牌位、`assets/inject/recovery.js` 浮层。
@@ -364,7 +364,7 @@
> 结论:**不是"忘了",是"真源没落在同一条链上"**。三条缺一不可:
1. **真源不在源仓** —— 新标记由 09-20 那轮在**另一个工作区**(`E:/ProgramData/AI技能/dsh-ai1net-github`,开源导出线)加工,产出 `_app-icon_20260920/`。
1. **真源不在源仓** —— 新标记由 09-20 那轮在**另一个工作区**(`E:/ProgramData/AIProject/dsh-ai1net-github`,开源导出线)加工,产出 `_app-icon_20260920/`。
该轮 README 末句明写「**未改动导出仓、`_overlay`、源仓任何文件**;接线方式见报告三选项,待确认」
⇒ 标记当时只存在于导出工作区,**源仓 `dsh_shenxian` 里没有任何痕迹**。
2. **源仓与线上分叉** —— 09-20 21:17 已有人把 `favicon-192/180/ico/png` 放到**线上** `/opt/dshs/web/` 并改了各页 head 引用,
@@ -861,7 +861,7 @@ identity.ts:517 /** 生成一把 Ed25519 根 / 签名者密钥(**同形**,
| `agent-workspace-discipline` | 15.6 KB | **工作区归属三律**(治会话落错家)+ 抢锁校验退出码 + 锁生命周期/反序释放/禁接管 + 目录落位与命名 + 提交边界 + 批量红线 + 环境陷阱 8 条 |
| `agent-task-loop` | 13.9 KB | 规划棒↔执行棒形态 + 六件套 prompt 骨架 + **排期两铁律(收口+5~8 分钟 / 同一时刻只挂一个)** + 登记门禁(先判拍板、再判优劣)+ 七条防护 + 成本纪律 + 自动化五要素 |
**隔离判据(用户硬要求)**:三个技能**零硬编码项目路径**(复跑 `grep -c "E:/ProgramData/AI技能\|D:/github"` = **0**)。项目专属内容(`CODEBUDDY.md` 红线编号、47/106 服务器、`state.py`/`handoff-guard.sh` 真实路径、UI 规范)**一律留在本工作区**;技能只给**形态 + 判据 + 落地前六项核对清单**,并显式写明「以当前工作区自己的规则文件为准」。
**隔离判据(用户硬要求)**:三个技能**零硬编码项目路径**(复跑 `grep -c "E:/ProgramData/AIProject\|D:/github"` = **0**)。项目专属内容(`CODEBUDDY.md` 红线编号、47/106 服务器、`state.py`/`handoff-guard.sh` 真实路径、UI 规范)**一律留在本工作区**;技能只给**形态 + 判据 + 落地前六项核对清单**,并显式写明「以当前工作区自己的规则文件为准」。
**关键的边界设计**:技能内不出现「去读别的工作区的文档」这类指示;跨工作区取状态只教 `--ws` 调用姿势(**⛔ 明令不复制脚本**),从而反向强化「不影响其他工作区」。
@@ -949,7 +949,7 @@ identity.ts:517 /** 生成一把 Ed25519 根 / 签名者密钥(**同形**,
| `references/02-工作区纪律.md` | 15.8 KB | 归属律全文 / 锁全套 / 目录与命名全表 / 提交边界 / 批量红线 / 环境陷阱 9 条 + 本机铁律 + 四条取数坑 |
| `references/03-多棒接力编排.md` | 12.5 KB | 六件套 prompt 全文 / 七条防护 / 成本纪律 / 交付门禁 / 落地五项核对 |
**判据**:全 4 文件**硬编码路径 = 0**(`grep -c "E:/ProgramData/AI技能\|D:/github"`)⇒ 跨工作区不串味。
**判据**:全 4 文件**硬编码路径 = 0**(`grep -c "E:/ProgramData/AIProject\|D:/github"`)⇒ 跨工作区不串味。
**为什么改成"单入口 + references"而不是纯单文件**:① 满足用户"一个 SKILL"的要求,会话只需命中一个入口即拿到全部硬规则;② 避免把 68 KB 全塞进上下文(细则按需读,符合"分层判据");③ 与既有 `dsh-decision-method`(同样 `SKILL.md` + `references/`)保持一致的目录约定。
@@ -980,7 +980,7 @@ identity.ts:517 /** 生成一把 Ed25519 根 / 签名者密钥(**同形**,
**复跑命令**:
```bash
cd "E:/ProgramData/.workbuddy/skills" && for n in dsh-feature-first dsh-knowledge-upkeep impeccable taste-skill humanizer AI\ HOT; do echo "$n: $(grep -rl "$n" "E:/ProgramData/AI技能/aliyun-dsh-server" "D:/github/dsh_shenxian/dsh-server-docs" 2>/dev/null | wc -l)"; done
cd "E:/ProgramData/.workbuddy/skills" && for n in dsh-feature-first dsh-knowledge-upkeep impeccable taste-skill humanizer AI\ HOT; do echo "$n: $(grep -rl "$n" "E:/ProgramData/AIProject/ai1net-dsh-server" "D:/github/dsh_shenxian/dsh-server-docs" 2>/dev/null | wc -l)"; done
```
**待用户拍板的两项**(本次只报告,未动手):
@@ -1151,8 +1151,8 @@ cd "E:/ProgramData/.workbuddy/skills" && for n in dsh-feature-first dsh-knowledg
2. 🔴 **最强的答案不在技能里,在 hook 里**:本机**已经装了机制层强制**。`E:\ProgramData\.workbuddy\settings.json` 的 `hooks.UserPromptSubmit`(全局,应用启动时快照)挂了 **4 条**:
- `D:/github/dsh_shenxian/dsh-server-docs/scripts/skill-load-guard.py`
- `D:/github/dsh_shenxian/dsh-server-docs/scripts/stop-dialog-guard.py`
- `E:/ProgramData/AI技能/dsh-ai1net-desktop/.workbuddy/guard/skill-load-guard.py`
- `E:/ProgramData/AI技能/dsh-ai1net-desktop/.workbuddy/guard/stop-dialog-guard.py`
- `E:/ProgramData/AIProject/ai1net-dsh-desktop/.workbuddy/guard/skill-load-guard.py`
- `E:/ProgramData/AIProject/ai1net-dsh-desktop/.workbuddy/guard/stop-dialog-guard.py`
`skill-load-guard.py` 每次用户提交时扫输入,命中 **12 个点名词**(`决策方法` / `自行决策` / `自主决策` / `自己决策` / `自己拿主意` / `别问我` / `不要问我` / `不用问我` / `按你的规划` / `按你的判断` / `参考决策` / `决策方法论`)⇒ 用 `additionalContext` 注入「**先调用 Skill 工具加载 `dsh-decision-method`**,不要凭记忆代替」,冷却 300 s。
⇒ **用户不需要说"按技能来",只要说「**按决策方法**」这类点名句,机制就自动把技能推给会话。**
⚠️ 实测注入次数 = **3 次**(09-16 三次,含一次 selftest);其余日期 0 次 —— 因为**该词表窄且只覆盖"决策方法"这一族**。