chore(工作区): 归档交接单 27 件 + 新增 CODEBUDDY §9 工作区卫生

交接单按归属约定(正文落文档库、工作区只放指针)归档至
归档/交接单-20260924-归档/,含逐件判定 README:
- 16 件已被文档库正式版取代(T09–T21 + 覆盖网络-24/25/26)
- 4 件主题已被覆盖网络线入口汇总
- 7 件历史接续包/规划件

CODEBUDDY §9:收口清本棒 tmp、tmp 保留期 7 天、禁「待清理」中间态、
工作区入库只放文档与文件、不保留脚本副本、>60 KB 单文件须逐个判。
This commit is contained in:
admin committed 2026-09-24 07:58:57 +08:00
1 parent a5b3a76cd3
commit 7bd1151c67
30 files changed
+63

No files matched your search

@@ -0,0 +1,93 @@
# MCN 线 · DB 接入规范合规化(处置情况 + 待做项 + 接续范围)
- 日期:2026-09-21 06:03
- 触发:用户「**需要按照接入规范调整**,然后分析之前待定的 用户公共插件只读的方案,看能否找到对应文档」
- 规范单一来源:`dsh-server-docs/数据库/DB-00…DB-03`(2026-09-20 22:46–22:49 立);配套 = `04-调整方案/144-插件规模化投放与版本一致性.md` §五/§六
- 状态:✅ **已收口(2026-09-21 更新:三项规范改动已落 · 双写已消解 · 3 行差异经查为用户主动删除)**
---
## 一、处置情况(事实)
| 事实 | 读数 |
|---|---|
| 已落 | 本机 `C:\Users\Administrator\.dsh\mcn-plugin.db`(4,247,552 B)→ 47 上 admin 实例 `<userRoot>/home/.dsh/mcn-plugin.db`(2,383,872 B) |
| 落点 | ✅ 与规范一致:插件自有 DB ⇒ 实例 home(DB-01 情形 3 / 档案 144 §6.3) |
| 内容 | ✅ 10 表 441 行、按列名合并零列丢失、`PRAGMA integrity_check=ok`;备份 `/opt/dsh/backups/mcn-plugin.db.admin-20260920-2029`。⚠️ 较本机快照少 3 行 `rewrite_log` **= 用户主动删除、非丢数据**(journal 2026-09-20 23:04:57 / 23:05:02 / 23:05:05 三次 `/mcn/api/rewrite/delete`,与库 mtime 23:05:05 秒级吻合;`rewrite_log` 无 UNIQUE 索引)⇒ ⛔ **不要补那 3 行** |
| **写入通路** | ⚠️ **当时非合规**(走平台侧 root `cp` + 原子 `mv` + `chown 114801`,**不是 `UserFs`**);**规范缺口已补(2026-09-21)** ⇒ 见 §二 第 2 条 |
| **双写** | ✅ **已消解(2026-09-21)**:本机 `C:\Users\Administrator\.dsh\mcn-plugin.db` 已送回收站,归档 `待清理/MCN-DB-本机副本归档-20260921/mcn-plugin.db.local-20260905.bak`(sha256 `2a79a252…f459e91`);47 上 `<userRoot>/home/.dsh/mcn-plugin.db`(2,383,872 B)为**唯一权威** |
**根因(本轮新查,关键)**:`UserFs` 在 home 面上**没有**这条通路 ——
`src/fs/user-fs.ts:126` 的白名单 `HOME_FILE_NAMES = ['settings.yaml', '.credentials.yaml', '.overlay-device.json']`(**只收裸文件名,⛔ 不收路径**),
且 `:113` 的签名是 `writeHomeFile(userId, name, text: string)` = **文本语义**;`upload()`(`:83`)是 workspace 相对路径 ⇒ 只能写 `ws/`。
⇒ **`home/.dsh/mcn-plugin.db` 这个文件,用现行 `UserFs` 根本写不进去。**
⇒ 所以「把 root `cp` 换成走 `UserFs`」这条路**不成立**;真正缺的是**规范本身没覆盖"插件自有二进制 DB 的导入通路"**。
⇒ ✅ **2026-09-21 已补**:`DB-03` 新增「平台侧不得以 `cp`/`mv`/直接 `fs` 写用户 home 任意文件」条款,`DB-01` 情形 3 同步补同一条款(该缺口不再存在)。
---
## 二、合规化待做项(第 1–3 条 ✅ 已落 2026-09-21 · 第 4 条需拍板)
**第 1 条 · 修 `DB-03` 陈旧头部**(1 处 · in-lane)—— ✅ **已落**
已改为「✅ 已落文档库 · 本文件即唯一正式来源」,原「草案暂存 `…/tmp/`|待落点 `04-调整方案/143-`」已删(`04-143` 是另一件事 = MCN 工作台入口失效)。
**第 2 条 · 在 `DB-01` 情形 3(或 `DB-03 §1`)补"平台侧不得搬插件自有 DB"条款**(in-lane)—— ✅ **已落**
已写明:`UserFs` 的 home 面 = 3 个白名单裸文件名 + 文本语义 ⇒ **二进制 / 插件自有 DB 无平台侧合规写入通路**;
故 ⛔ 平台侧不得以 `cp` / `mv` / 直写 `fs` 去写用户 home 下任意文件(比原表述更强,原只禁"直写 `fs`");
此类文件只能由**实例内插件自建 / 自迁**(对应 DB-01 情形 3「实例内插件可用本地 SQLite」)。证据 = `src/fs/user-fs.ts:126`(3 个白名单裸文件名)/ `:113`(`writeHomeFile(text: string)` 文本语义)/ `:83`(`upload` 走 `ws/`)。
**第 3 条 · 数据库专区文件只读体检 + 对账**(in-lane)—— ✅ **已落(遗留已消)**
`数据库/` 4 文件**纯 LF**(`CR=0`;`LF=54/85/100/145`,共 384 行);IM D 单 `§九` **已正确指向** `数据库/DB-03`(`交接单/IM群组-D-插件SDK与扩展点契约.md:119`)。
⚠️ 顺带发现 `INDEX.md` 有 **5 个 CR**(混行尾):**只报告,⛔ 不顺手改**(属"顺手优化",须先出清单)。
**第 4 条 · 历史数据导入的合规通路(需拍板)**
见下文 §四。
---
## 三、接续棒(已登记 automation)
范围 = 上述第 1–3 条 **in-lane** 项 + 双写**只读**判定(出清单,⛔ 不动任何一份 DB)。
⛔ 明确不碰:不 commit / 不 push(工作区当前 **39 个 `M` + 28 个 `??`**,含序47 / carbon / StoryForge 多条线在途 ⇒ 提交必然扫进别线 WIP);不改 `UserFs`(扩权限面 = R5,属拍板);不动 MCN 表名前缀(拍板);不动 MCN 插件产物。
---
## 四、待拍板(1 项)
**问题**:本机旧数据(4.2 MB / 444 行)当初怎么进平台实例,是**一次性例外**还是要一条**可复用的合规通路**?
- **候选 A** —— 由实例内插件提供一次性导入入口(把 db 放 `ws/` 由 admin 上传,插件读 `ws` 导入)。
优点:不扩平台权限面,符合"实例内插件管自己的 SQLite";缺点:要改插件加导入功能,且要走一次实例内人工操作。
- **候选 B** —— 给 `UserFs` 加受控的 home 二进制写入面(白名单扩到 `.dsh/*.db`,或新增 `writeHomeFileBytes` + base64 wire,同步 worker agent 端点)。
优点:机制统一,以后任何插件自有 DB 都能走平台侧合规通路;缺点:**扩大权限面**(平台获得写用户 home 任意 db 的能力),与收窄方向相反,属 R5 门禁。
- **候选 C** —— 维持已发生的 root `cp`,登记为一次性例外并写明原因。
优点:零成本,数据已在位且 `integrity_check=ok`;缺点:无合规通路可复用、下次必再撞同一坑、审计上说不清。
**我倾向 A**(MCN 的导入是历史一次性动作,不值得为它给平台开一个写用户 home 任意 db 的口子)。
---
## 五、顺带结论:「用户公共插件只读」的对应文档 = **已找到**
**`dsh-server-docs/04-调整方案/144-插件规模化投放与版本一致性.md`**(INDEX 登记为 `04-144`,状态 📋 待拍板选档):
- **§三 A**「必装插件改成 **Worker 共享只读插件层** + 每用户只留开关」= 共享只读的**做法主体**(`/var/lib/dshs/bundled-plugins/<pkg>/<version>/`,per-user 只留 PG 开关清单 + 软链;沙箱 **ro-bind**,照抄 `bundled-skills` 现成先例)。
- **§三 B**「**用户可选插件同构(共享层 + 每用户启用位)**」= 即"用户公共插件只读"的直接对应项(候选池语义由"上传 tgz → 每人装"变成"**上架到共享层**")。**依赖 A 先立住。**
- **§五** 四条红线(只放不可变代码 · 沙箱内必须 ro-bind · 版本目录不可变 · 数据落点仍走既有判据)+ 唯一真实新增风险 = **爆炸半径 1 → N**。
- **§六** 运行期数据落点五问判据(共享层只放"永远不会变的东西")。
- **§七** 待拍板 3 项:起步档位(C 先行 / A 直接做 / A+C 并行,作者倾向 **C 先行、A 紧随**)· 试点范围(仅 47 / 47+106)· 多版本策略(同机一版 / 允许 K 版并存)。
- 旁证:`01-规划与架构.md:62`「系统标准层(公共模型/插件/技能)**只读共享**」·`:148`「镜像预置公共插件(人人可用,**不可改**)」·`:161`「普通用户不开 `dsh plugin add`;公共插件管理员审核后入镜像」;语义区分见 `04-调整方案/16-…:110`「技能『投放即生效』(只读共享层),插件『候选池默认禁用 + 按需启用』,勿混」。
⇒ **该方案未失效、未落地,卡在 §七 三项选档**;本线不自行选档(属影响面 / 起步档位判断)。
---
## 六、证据索引
| 项 | 位置 |
|---|---|
| 规范四件套 | `dsh-server-docs/数据库/DB-00…DB-03`(384 行,纯 LF) |
| `UserFs` home 白名单 | `src/fs/user-fs.ts:113`(签名)·`:126`(白名单)·`:83`(`upload` = ws) |
| 平台侧写 home 的正当理由 | `src/fs/user-fs.ts:96-101` 注释(档案 138 §五「直写 = 静默空操作」) |
| 共享只读插件层 | `04-调整方案/144-…md` §三/§五/§六/§七 |
| 落点判据 | `04-调整方案/144-…md` §6.1 表 + §6.2 五问 + §6.4 两条铁律 |