Files
dsh_ai1net_server/归档/交接单-20260924-归档/MCN线-DB接入规范合规化_20260921.md
T
admin 7bd1151c67 chore(工作区): 归档交接单 27 件 + 新增 CODEBUDDY §9 工作区卫生
交接单按归属约定(正文落文档库、工作区只放指针)归档至
归档/交接单-20260924-归档/,含逐件判定 README:
- 16 件已被文档库正式版取代(T09–T21 + 覆盖网络-24/25/26)
- 4 件主题已被覆盖网络线入口汇总
- 7 件历史接续包/规划件

CODEBUDDY §9:收口清本棒 tmp、tmp 保留期 7 天、禁「待清理」中间态、
工作区入库只放文档与文件、不保留脚本副本、>60 KB 单文件须逐个判。
2026-09-24 07:58:57 +08:00

94 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 两条铁律 |