Files
dsh_shenxian/dsh-server-docs/04-调整方案/38b-术语统一业务插件改功能插件.md
T
admin 5ad755116e chore(docs): 文档库并入代码仓(R4 选 a)+ 索引/台账跟进
1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
   保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
   工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
   必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
   + ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
   ⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
   验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
2026-09-15 18:47:13 +08:00

72 lines
5.7 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.
# 38b · 术语统一「业务插件」→「功能插件」(含 0.2.1 与脚本加固)
- 日期:2026-09-11
- 触发:用户要求「将所有业务插件字段 改为 功能插件」
- 状态:**✅ 已实施(`99de8c5` + `79d9aed`)并验证**
> **TL;DR**|**结论**:「业务插件」统一改名 **功能插件**(字段 / 文案 / 文档),含 v0.2.1 与脚本加固。
> **关键**:顺带确认:**亮/暗切换与多语言都是 dsh 官方能力**(插件用 `--dsw-*` token + 官方 locale 自动跟随)。
> **状态**:✅ 已实施并验证
## 一、范围界定(重要)
**只改显示术语 / 文案 / 注释;不动代码标识符。**
| 已改 | 未改(刻意) |
|---|---|
| 门户页面文案、client bundle 文案(section label / 空态 / 确认框)、src 注释、运维脚本注释、全部文档(含档案正文)、技能 | 表名 `business_plugins`、包名 `@dsh-local/business-plugins`、section id `business-plugins`、API 路径 `/api/plugins/{business,mine}`、文件名 `business-plugins.ts` / `ensure-biz-plugins.cjs`、目录 `poc/business-plugins/` |
**理由**:标识符改名需 DB 迁移 + 全量重铺 profile + 改 API 与前端调用,**用户可见收益为零**,纯风险。若确需,可另立档案。
## 二、替换明细
- **中文:31 个文件 / 87 处**;**英文侧补 3 处**(`Business plugins` → `Feature plugins`、`Apply business-plugin changes` → `feature-plugin`)。
- 覆盖:`portal.html`(5) · client bundle 文案(4,含 `section.label` 与 `empty`) · `src` 注释(10) · 运维脚本(3) · 文档(root 级 + `04-调整方案/` 01–37 + `06-工作台UI规范` + `INDEX` + `README` + `skills`)。
- **档案重命名 3 个**(INDEX / 状态备注 引用同步):
- `34-业务插件启用探活与逐插件隔离.md` → `34-功能插件启用探活与逐插件隔离.md`
- `36-业务插件分区铺给普通用户.md` → `36-功能插件分区铺给普通用户.md`
- `37-业务插件分区v0.2官方token与i18n.md` → `37-功能插件分区v0.2官方token与i18n.md`
**踩坑**:首轮扫描把 `lib/` 放进 `SKIP_DIR_NAMES`(本意跳过构建产物)→ **client bundle 的文案被漏掉**,而那正是最显眼的 section label。已补做(`lib/client.js` 4 处 + `lib/index.js` 1 处)。
## 三、顺带修复
### A. client bundle v0.2.1(仅文案变更)
### B. `ensure-biz-plugins.cjs` 两处缺陷
1. **`ARTIFACT` 自动取最新版**:原为硬编码版本号(每次升版都要改脚本);且中途一版把正则转义写坏成 `\\d`(JS 里是"反斜杠+d",永远匹配不到,只能靠硬编码兜底)。→ 改为**无正则实现**(`PREFIX` 前后缀 + 语义化版本比较),取产物目录里版本最大的包。
2. **增加版本感知**:原实现只看 `bundles` 成员 → 已装用户永远"跳过",**升级不会被应用**。→ 现在会比较 `file:` 依赖 basename 是否等于目标产物名,落后则重新 `pnpm add`。这一条让「丢新包 → 跑一次脚本」成为完整的升级流程。
### C. `.gitignore` 防复发
`99de8c5` 提交时 `git add src` **误卷了两个未跟踪的 `.bak-*` 备份**(正是项目里反复警告的坑)。→ `git rm --cached` 撤出 + `.gitignore` 增加 `*.bak-*`(`79d9aed`)。
> **遗留**:仓库里还有 **5 个更早被跟踪的 `.bak-*`**(`src/config.ts`、`src/supervisor/{orchestrator,spawn}.ts`、`src/web/server.ts`、`web/login.html`)—— 属历史遗留,未擅自处理,待确认是否一并撤出跟踪。
## 四、验证
| 检查项 | 结果 |
|---|---|
| 两侧依赖 | ✅ 均指向 `business-plugins-0.2.1.tgz`;ws 内包就位;旧 0.2.0 已清 |
| 已装版本 | ✅ guest `node_modules/@dsh-local/business-plugins` = **0.2.1** |
| 脚本幂等 | ✅ 再跑输出「已是 business-plugins-0.2.1.tgz → 跳过」 |
| **UI 实拍** | ✅ headless Chrome → guest 设置面板,导航项显示「**功能插件**」 |
| 残留检查 | ✅ 源码/文档中已无「业务插件」 |
> **附带发现**:dsh 官方「通用设置」里本来就有 **语言(中文/English)** 与 **外观(浅色 / 深色 / 跟随系统)** —— 这印证了档案 37b 的结论:**亮/暗切换与多语言都是官方能力**,我们的插件用 `--dsw-*` token + 官方 locale 自动跟随,无需自行实现。
## 五、后续
### 已决策(2026-09-11,用户「按建议处理」)
1. **✅ 5 个历史 `.bak-*` 已撤出跟踪**(`6c3fea0`):`src/config.ts` / `src/supervisor/{orchestrator,spawn}.ts` / `src/web/server.ts` / `web/login.html` 的 `.bak-*`。
**理由**:与 git 自身历史完全重复,却真实带来「`git add <目录>` 把同目录未跟踪备份一并暂存」的风险(本档案已踩一次)。`.gitignore` 的忽略规则不影响已跟踪文件,故必须显式 `git rm --cached`。**文件保留在磁盘**,工作区现已完全干净(`git status` 无输出)。
2. **✅ 标识符不改**(维持 §一 的决定):表名 `business_plugins`、包名 `@dsh-local/business-plugins`、section id `business-plugins`、API 路径 `/api/plugins/{business,mine}`、文件名与目录名一律保持。
**理由**:改名需要 DB 迁移 + 全量重铺 profile + 同步改 API 与前端调用,**用户可见收益为零**,纯风险。术语层(文案/注释/文档)已统一为「功能插件」,内外称呼差异可接受。
### 仍待办
- admin 侧事故可见性(`audit` 目前只有写没有读,需加读取方法才能在门户显示「N 个用户启用失败」)
- 重启前 `dump-config` 预检(可 0 重启拦住配置类错误)
- 批量上限保护(单批 >5 个插件时只回滚不清洗,避免重启十几次)