交接单按归属约定(正文落文档库、工作区只放指针)归档至 归档/交接单-20260924-归档/,含逐件判定 README: - 16 件已被文档库正式版取代(T09–T21 + 覆盖网络-24/25/26) - 4 件主题已被覆盖网络线入口汇总 - 7 件历史接续包/规划件 CODEBUDDY §9:收口清本棒 tmp、tmp 保留期 7 天、禁「待清理」中间态、 工作区入库只放文档与文件、不保留脚本副本、>60 KB 单文件须逐个判。
8.3 KiB
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 两条铁律 |