Files
BakNRet/docs/adr/0012-entry-rename-and-shims.md
Shuery 60f2ae3e0f docs: TUI 与入口重组的设计记录(4 条 ADR + 验收锚点)
grilling 三轮把设计树走完了,这里把它落成文件,避免决策只活在对话里。

ADR-0010 零依赖自研 TUI:三个候选库全部实测排除 —— ConsoleGuiTools 的 PSGallery 元数据声明最低 7.2(5.1 装不上);Spectre.Console 0.49.1 能在 5.1 加载但要塞 4 个第三方 DLL 且不支持鼠标;Terminal.Gui 1.15.0 能反射接线到真的渲染出窗口,但 Application.Shutdown() 在两端都抛 NRE。同时记下两条实测坑:无控制台时 $Host.UI.SupportsVirtualTerminal 会撒谎返回 True(第一道闸门必须是 [Console]::IsOutputRedirected),以及 5.1 的 RawUI.LengthInBufferCells 对中文返回 2、对边框字符返回 6(都不能用来排版)。

ADR-0011 进度回调这个例外:它是注入点不是状态,无头路径为 $null 时行为与今天完全一致。

ADR-0012 入口改名与垫片:这次留垫片而 Common.psm1 直接删,是因为前者是外部接口(断了是静默没用)后者是内部实现(断了当场报错)。并纠正了自己的一个伪前提 —— 本机实测没有注册任何 BakNRet 计划任务。

ADR-0013 TUI 写配置:外科式改写 + 校验通过才原子替换。硬事实是 SoftwareCatalog.psd1 根本不能被 Import-PowerShellDataFile 读入(动态表达式),任何"解析成对象再序列化"的方案都会毁掉表达式与注释。

.scratch/tui/spec.md 是这次改造的验收锚点:9 条已定决策 + 三轮的判据 + 风险表。

验收:Parse 两版仍绿。
2026-09-27 15:27:01 +08:00

31 lines
1.7 KiB
Markdown
Raw Permalink 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.
# 入口改名:新名字 + 只留一轮的薄垫片
入口从一个(按方向各一个脚本)变成四个:
| 名字 | 角色 |
| --- | --- |
| `Manage-Backup.ps1` | **主入口**:TUI;同一个文件的无头模式(`-Action Backup -Quiet`)供计划任务调用 |
| `Backup-Data.ps1` | 备份动作(无头) |
| `Restore-Data.ps1` | 恢复动作(无头) |
| `Edit-Config.ps1` | 配置管理(TUI 三个界面) |
旧的 `Backup.ps1` / `Restore.ps1` 留**薄垫片**(转发 + 打印一句改名提示),**只留一轮**,下一轮删。
## 为什么这次留垫片,而 ADR-0001 里 `Common.psm1` 是直接删
因为两者的性质不同:`Common.psm1` 是**内部实现**(只有仓库内引用,全仓 grep 就能改完),而入口
脚本是**外部接口**——README 里 25 处、使用者的肌肉记忆、以及 `tools/Register-BackupTask.ps1` 里
硬编码的 `-File <仓库>\Backup.ps1`。内部实现断了当场报错,外部接口断了是**静默没用**。
## 一处实测纠正
写这条决策时我原以为"有个正在跑的计划任务依赖旧路径"。实测:**本机没有注册任何 BakNRet 计划
任务**(枚举 200 个任务,按任务名与 Action 两个维度过滤,0 条命中)。所以那个风险**现在不存在**,
垫片的理由只剩"使用者的肌肉记忆 + 文档引用"。改名时必须**同步改 `Register-BackupTask.ps1`**,
否则将来注册出来的任务会指向一个垫片。
## 命名上的一处偏离
用户最初提的是 `Handle-Config`。`Handle` **不在** PowerShell 官方 approved verbs 里,而本仓库的
静态分析门禁里 `PSUseApprovedVerbs` 是恒开的(当前 0 告警),所以改用 **`Edit-Config`**。