Files
qingjian/docs/plan/todo.md
T
yenharvey 4f37e9fd65 feat(settings): 新设置程序的候选页加上小键盘数字(Windows)
#354 只接了旧版 Windows 设置;新设置程序是主入口,按平台支持表只在 Windows 显示,macOS、Linux 记为待实现。文档同步到按键页与设置页。
2026-10-26 11:28:47 +08:00

169 lines
22 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.
# TODO
按「从自用到能给别人用」排。勾掉的移到 [roadmap.md](roadmap.md) 对应阶段。`★` 是当前建议的优先项。
2026-09-06 状态:核心输入、翻译(中→英 / 日 24.9 万词、英→中 4.5 万词、注假名、修饰键上屏译词、翻译选中文字)、英文模式候选、
自建词库(基础 8.7 万条 + 随包领域词库 11 本 13 万条,含语料挖出的高频词)、多词库与导入 / 移除 / 开关、偏好设置、`.qj` 容器(启动 50 ms)、
个人 n-gram(二元 + 三元)、词图内敲错边、崩溃不丢、pkg 安装器、README 安装 / 隐私 / 许可都已完成并在自用。
给测试者打包只剩:特殊应用验证(用户自己在各应用里试);签名等 Developer ID 证书。
## 〇、上线前必须做(不做就不能给别人)
- [ ] 词库质量(产品词库已自建,见 roadmap):常用词表只有 5.6 万,语料挖出的 1.57 万高频词已并入(蚌埠 / 台州 / 高铁 / 吐槽 这类补上了),
网络用语目录还空着(`assets/lexicon/04_internet_slang`);LLM 标注的多音字读音抽查;挖词过滤已进 `dict-convert mine`(2026-09-07,`oov_filter.rs`,与原脚本输出逐行一致);
LM 表(TSV 48 MB / `lm.qj` 29 MB)不进 git,先按发布附件对待
- [ ] ★ 首次运行体验:没有 `data/generated/` 时打进包里的样例词库只有几十条,等于不能用;随包数据(词库、LM 表、释义表、emoji)
要有一套发布版并定好体积(现在 `dict.qj` 3 MB + 领域词库 7 MB + `lm.qj` 29 MB + 释义表 `.qj` 39 MB + 英文词表 2 MB,pkg 34 MB;可再考虑变长编码);
发布物 = pkg(`bundle.sh --pkg`),要么 CI 生成数据、要么把 `data/generated/` 当发布附件
- [ ] 仓库瘦身(2026-09-07 决定:主仓库继续单库、官网独立仓库,不拆代码;要处理的是数据)。
已做:LLM 中间产物 `gloss-llm.jsonl`(30 MB)/ `gloss-en-llm.jsonl` / `pinyin-llm.jsonl` 移到 `data/generated/`(gitignore),仓库只留导出的 `glossary-*.tsv` 与词库源;
历史在同日压成 `v0.1.0` 单提交(完整开发历史在本地分支 `archive/dev-history`,不推),所以公开仓库里从没出现过这些文件。
还差:仓库推到 GitHub 后跑一次 `tools/release/data-bundle.sh`,把这三个 JSONL 与 `data/generated/*.qj` 传到 `data` 预发布 Release(现在只在本机与归档分支里有);
正式开源后若 clone 太慢,再考虑把 `assets/lexicon` + `assets/glossary` 拆成数据仓库,现在不做
- [ ] ★ 签名与公证:pkg 安装器、自动注册输入源、版本号 / 构建号已做(2026-09-06,`bundle.sh --pkg`);
CI 已搭(2026-09-07,`docs/notes/release.md`):推标签在 macOS runner 打 arm64 + x86_64 两个 pkg、建 Release、生成 `releases.json`,产品数据从 `data` 预发布 Release 下载。
还差:Apple Developer 账号的 Developer ID 证书(配齐 `release.yml` 头部的七个 Secrets 就自动签名公证)、仓库推上 GitHub 后第一次真跑验证(本机没跑过 workflow)、
官网改成读 `releases.json`(含 sha256 / 提交 / 构建时间的展示)并配 `QINGJIAN_WEB_TOKEN` 让发版与文档改动自动触发官网构建、更新检查
- [ ] ★ 特殊应用逐个验证(2026-09-07 用户已验:Zed、Terminal 正常;JetBrains 系没装没验):Secure Input(已有检测,验证密码框不组句、不发云端)、iTerm / Warp、VS Code / Electron、
浏览器地址栏、沙盒应用(App Store 版备忘录 / 微信)、全屏游戏;每个记录 preedit 模式建议(按应用的开关已有 `[apps]` 分节,
英文候选按应用关已做,preedit 模式按应用定可以接在同一分节)
- [ ] 登录后不恢复成青简:2026-09-06 两次开机日志都显示登录后当前输入源是系统拼音 / ABC,要手动切回(进程没崩过,panic 与崩溃报告都是零;
Caps Lock 切 ABC 的系统开关已排除)。怀疑装在 `~/Library/Input Methods` 的 ad-hoc 包每次重装签名变、登录早期枚举没认上;等签名后装 `/Library` 再看,
或在 `--register` 之外登录时补一次 `TISSelectInputSource`
- [ ] 卸载与重置:卸载脚本已随包(`uninstall.sh`,`--purge` 连数据删,README 有说明,2026-09-06);还差偏好设置里的「重置学习数据」按钮、
配置文件版本迁移(新增键有缺省,改名键要迁)
- [x] 许可证定稿(2026-09-07):GPL-3.0-or-later,`LICENSE` 全文、`Cargo.toml` `license`、「关于」页、README 一致;名字与 logo 不授权。以后引入 JMdict 要补进署名清单
## 一、日常输入体验(决定自己会不会一直用)
- [ ] 整句转换收尾:语料再补(现在是维基 + LCCC 微博对话,新闻 / 小说体还缺;bigram 只留次数 ≥ 6 的前 300 万对,
`wxqcf` 出 我想去蹭饭 就是「我想 → 去蹭饭」8 次进了表、「我想去 → 吃饭」没进的稀疏问题,简拼把读音放开后这类问题更显眼);
个人 n-gram 已做(二元 + 三元),「按应用分别记」看用起来的效果再说
- [ ] 释义兜底收尾:已做(2026-09-06,只对上屏的词库词 / 云端词查,个人释义表 `user-glossary-<语言>.tsv`);还可以考虑停顿后高亮的候选也查、
偏好设置里看 / 清个人释义表、导入词库时批量预填
- [ ] 本地整句模型的结果偶尔赶不上空格(Linux,2026-10-16):FreeBSD 端到端 Plasma · Firefox 的 `firefoxliulanqi`,修「只认最新请求」前 8 遍里 2 遍、修后 9 遍里 1 遍
按空格时整句还没换上来(上屏「勠」);同一台虚拟机里生成只要 100–136 ms,不是慢。要 Server 的调试日志才看得清时序,见下一条
- [ ] Linux Server 的日志级别写死成 info(`main.rs` 的 `with_env_filter("info")`),配置里的 `log_level = "debug"` 不起作用
- [ ] 本地整句模型的同步 / 异步结果不完全一致(2026-10-16 用 docs/user 抽的 635 句量:首选一致 629、候选列表完全一致 582,差在第 2 位以后);
neural-rescoring.md 记的是 300 句逐句一致。修「只认最新请求的结果」前后都是这个数,不是它引入的;先查是缓存条件还是生成时机
- [ ] 候选窗口里超长释义要截断(CEDICT 表时 你 那条能拉到整屏宽;LLM 表已短,仍要兜底)
- [ ] 翻译选中文字:译文很长时候选窗口的折行(读不到选区的提示已做)
- [ ] 英文模式候选:把数据包的误拼对照表(typos,10 万对)喂进纠正,技术词(kubectl)没有 wordfreq 词频要给底值,两处编辑的纠正
- [ ] 全角 / 半角切换,`。` 与 `.`(`-` `=` 非组句时的行为 2026-09-15 已定:仍是半角,但改由壳自己插入,
不再靠放行——放行在部分宿主里到不了应用,见 `candidate-ui.md` 的标点一节)
- [ ] 快捷短语(`i` 前缀):编码 → 短语表,用户可增删
- [ ] 问字模式离线版:拆字表(IDS 数据)按部件查字,云端版已有
- [ ] 双拼收尾:菜单栏增加方案切换
- [x] 双拼方案数据化:用户在 `schemes/<id>/scheme.toml` 写 `type = "shuangpin"` 就是一套方案,可拿内置方案当底子只改几个键(2026-10-20,Linux 未接)
- [ ] 双拼解码支持同码出多个读音——小浪的 `lk`(lai / lia)、`nm`(niang / nen)、`dk`(dai / dia)、`un`(en / eng)现在只解第一个,做完去掉 `every_syllable_round_trips` 里小浪的四个例外(#129)
- [ ] 辅码(issue #8,设计见 [docs/design/aux-code.md](../design/aux-code.md)):触发键(缺省 `;`,与「非拼音键进直输段 / 全角标点」排优先级)与逐键即筛、词级过滤、辅码态隐藏无码词;码表走 Rime yaml 导入(`columns` 必须解析、`import_tables` 跨文件合表、「有词无码」行要报警);码表存**独立码索引**(两段式查询,别复用词库 Slot);
原生表只带笔画(CNS11643 笔顺 + 大陆序覆盖表 `dict-convert stroke`,艹 3 / 辶 3 / 阝 2);设置界面加「辅码」页(macOS 偏好设置 / Windows 设置程序:触发键、显示码、码表列表、导入);第三方形码表(小鹤形 / 自然码形)不随包,走引导导入
- [ ] 整句 + 辅码:辅码态现在只出词候选,整句不出(`dongguaxigua;ppph` 拿不到「冬瓜西瓜」);要做得把码逐字约束进整句词图(设计文档「后续」)。2026-10-20 用户定先不做
- [ ] 敲错边收尾:敲错四类代价与整段纠错代价 2026-09-12 已在冻结日志(12886 条可评)上扫过,都在峰上,不改(`docs/notes/constant-sweep.md`);
个人折扣上限(3)回放从零学分不出好坏,等 `user-typos.tsv` 能带进回放(`--user-dict`)再看;
退格重打(组句内、跨上屏)已进输入日志 `retype` 事件(2026-09-12),攒够后先按 `docs/plan/model-eval.md` 的尺子算召回与误纠率,再决定喂不喂个人敲错表;
整段一处编辑那路仍是逐变体跑整句,长句慢(`nihoama` 1 ms、更长的几毫秒)
- [x] 个人 n-gram 插值常数(λ 0.8 / K 8 / 上限 0.5 / D 0.75)2026-09-12 回放扫过:K 全平,λ 0.7–0.75 与 0.8 差 0.3 个点、带神经重排后无差,封顶 0.7 起掉;保留现值(`docs/notes/constant-sweep.md`)。
「挤掉了」要选四次才翻过「给掉了」是 K 与封顶合起来的设计(一次误选翻不过),不是常数没调
- [x] 词库缺高频「代词 + 的」(我的 / 你的 / 他的):2026-09-12 加了短语层 `assets/lexicon/phrases.tsv`(`dict-convert phrases`,语料相邻两三词、对话语料里 ≥ 2000 次、
边界规则,5400 条:我的 / 好的 / 不知道 / 有没有 / 那我),品牌词 `brand.tsv`(青简 210);词典词头收不到的这一层以后按同一方法补
- [x] 语料里少的领域词(对齐 / 后端 / 词库 / 候选框):2026-09-12 从日志人工挑 48 条进 `assets/lexicon/domain_words.tsv`,语言模型走合成计数(`docs/notes/domain-words.md`);
语料 0 次的(微软拼音 / 悬浮条)按规矩没进,要进得另立白名单
- [x] 中英混杂词与英文专名(2026-09-15):`assets/lexicon/mixed_words.tsv`(C盘 / B站 / U盘 / T恤 / A股…,`cpan`→C盘,`youpan`→U盘,
可进整句 `wozaibzhan`→我在B站);`dict-convert english` 同编码优先大写专名(Windows ≠ windows),`07_display_forms.tsv` 补 VSCode / Bilibili 等;
产品 `dict.tsv` / `english.tsv` 已更新。句中英文仍只支持句末尾段,见「中英混输」。
- [x] 按输入串记的选择只认字面:已按「候选全拼记一份、查询取两者最大」做了(`user-choices.tsv` 字面键 + 读音键各一份;读音键只在当前输入是读音前缀且不少于两个字母时参与,简拼不带全拼的选择;英文词位置的仲裁只按字面键)
- [ ] 已经学进用户词的错读音云端词(`我的 wo di`、`我的哦 wo di e` 这类)没有清理入口:偏好设置词库页给「按读音核对用户词」,或一次性脚本
- [ ] 正式版前的发布可信性(2026-09-12 外部 CI 检查,测试版先不做):产品数据改不可变 tag 并在仓库锁版本 + SHA(2026-09-16 已做:`data-vN` Release + `tools/release/data.lock` + `data-fetch.sh`);
安装包内容验证(pkg / Setup.exe 里词库、模型、许可齐不齐,`codesign --verify` / `signtool verify`);`cargo deny`(许可证 + 来源);`.qj` 读取器越界 fuzz、`qingjian-format` 跑 Miri
- [ ] 本地整句模型(已进壳并随包发出,见 `docs/notes/neural-rescoring.md`;加载 12 秒是早期首次 Metal 编译的记录,2026-09-12 装机实测 102 ms,划掉):
重排改了切分时应用里的行内拼音要到下一键才更新;日语
- [ ] 个人微调(LoRA 挂在冻结基模上,基模更新后拿本地日志重训):先在 train 仓库验证收益,再验 candle CPU 训练能不能跑通,都过了才进壳
(闲时门禁、加载时合并权重、开关与一键清除);每个模型假设先按 `docs/plan/model-eval.md` 写尺子与基线
- [ ] 通变按当前词库重标拼音重训:训练用的旧词库没有 嗯 / 诶 / 囧,字表里也就没有,带这几个字的路径现在整批不重排(`enen` 靠静态模型出 嗯嗯)
- [x] 个人英文词表没有衰减(2026-09-24 发现):用户词频 / 个人英文词 / 敲错表三张表已加牛顿冷却时间衰减
(半衰期 90 天,`--tune decay-days=` 可调,0 为不衰减),冷却只压排序权重,记录保留、冷满一年才在落盘时清出,
30 天不用的英文词失去「当第一」的资格;自愈出口仍是删候选(0.3 起在候选右键菜单里)走 `forget_english`。
「位置只有两档」另见 #606。
- [ ] 日语 emoji 要等有日语输入模式
- [ ] 人名输入(2026-10-20 用户群反馈,对照微软拼音):一串拼音像人名时,第一个音节先按姓氏匹配、不当词语查;
首字是「长」「令」「欧」这类时再看第二字能不能凑成复姓(长孙、令狐、欧阳),剩下的按名字常用字表组合。
要两张表(姓氏含复姓、名字常用字频),来源要许可干净;什么时候按人名排、怎么不挤掉普通词要先定,改了排序过回放
## 二、产品特色
- [ ] 释义表收尾:覆盖面再扩(次数阈值降到 100 约 10 万词);JMdict 校对假名与日文词性;等级表(CEFR / JLPT 已随包,见 `assets/levels/`)
也可做英→中、日→中方向的种子;四六级 / 商务英语词表要先找到许可干净的来源
- [ ] 可选复习(Phase 4):输入统计、生词识别、词汇统计(含 CEFR / JLPT 等级分布)已做(2026-09-06);复习容易变成打扰,先不急
- [ ] 云联想收尾(Phase 6):密钥进系统密钥库——mac 钥匙串、Windows 凭据管理器(等签名定了再做,ad-hoc 签名每次重装都弹授权;安卓已用 Keystore,见 `docs/notes/android.md`)、按应用禁用、限流与用量统计
- [ ] 个人模型(Phase 7):小 Transformer 实验(有评测门槛),见 roadmap
- [ ] ★ **主题与自绘渲染器 spike**(2026-09-13 定向,分支 `renderer-spike`,见 [design/rendering.md](../design/rendering.md)):
tiny-skia + cosmic-text 画一行「青简 hello 🙂 日本語」+ 圆角阴影,Windows / macOS 与原生并排截图,验四条:彩色 emoji(sbix / COLRv0)、
中日字形回退按 locale、字体按需加载(不扫全系统)、灰度抗锯齿观感;首帧耗时与内存不劣于 GDI / AppKit。过了 Windows + macOS 一起换渲染器、主题文件 TOML;
不过退回各平台各自渲染(Windows 走 D2D)。设置程序不自绘。
## 三、其他平台
- [~] Windows TSF(Phase 5):真机自用中,候选窗已覆盖商店 / 任务栏搜索(`uiAccess` + 自签)。
与 mac 功能齐平尚缺(按价值排;工时=开发+真机验证合计,单人;真机来回是大头):
- [~] **① 翻译选中文字 `translate_selection`**(★★★ / 中高 / 1.5–2 天):**代码完成,待真机测**(2026-09-10)。
新增 `RequestSelection` / `Selection{text,rect}` 两协议消息;DLL 异步只读会话(`com/selection.rs`,`GetSelection`+`GetText`+`GetTextExt`)
读选区 → Server `request_translation`(`PredictionKind::Translate`)→ 自绘候选窗显示译文 → 回车 / 空格替换(回 `commit` 走 `InsertTextAtSelection` 替换选区)/ Esc 保留;
设置页「快捷键」加了翻译选中文字行(改修饰键)。mac 全绿 + windows-gnu 交叉编译 / clippy 过;沉浸式应用读选区、替换选区待真机验。
- [~] **② 生词「看到轮次」计数 `note_displayed`**(★★☆ / 低 / 0.5 天):**代码完成,待真机测**(2026-09-10)。
`dispatch/mod.rs::reconcile_candidates` 里真正 show 那次按当前页调 `Engine::note_displayed`、收窗传空,对齐 macOS `render`;轮次推进、生词满 3 轮毕业。
- [~] **③ 悬浮状态条**(★★☆ / 中 / 1.5–2 天):**代码完成,待真机测**(2026-09-10)。
Server 侧单例,跟候选窗同一条 UI 线程;分层窗合成器从候选窗 `surface.rs` 抽出成 `ui/layered.rs` 两边共用,绘制件(主题 / DPI / 深浅)复用;
状态条自己一个窗口类 + 窗口过程(`ui/status/`):`WM_NCHITTEST`→`HTCAPTION` 整块可拖、`WM_MOUSEACTIVATE`→`MA_NOACTIVATE` 不抢焦点、
`WM_EXITSIZEMOVE` 把位置写回 `[status_bar] x/y`(`GWLP_USERDATA` 存自身指针)。新增协议 `ClientMessage::ModeChanged{english}`(fire-and-forget),
DLL 在 `update_mode_indicator` 推模式;Server 据此刷、会话关就收起;双拼方案 Server 从 `[general] shuangpin` 知道。配置加 `[status_bar]` 分节(`enabled`/`x`/`y`),
设置「候选窗口」页加开关。沿用 GDI 分层窗保持视觉一致,并记住位置。
mac 全绿(+3 状态条分派测试)+ windows-gnu 交叉编译 / clippy 过;拖动 / 记位置 / DPI / 深色 / 盖高 z-band 待真机验。
- [~] **④ 删候选屏幕提示**(★☆☆ / 低 / 0.5 天):**代码完成,待真机测**(2026-09-11)。
`Frame` 加 `notice: Option<String>`(不参与 `is_empty`),`dispatch/shortcut.rs::forget_on_page` 填、`handle_key` 开头清(只活到下一次按键);
自绘候选窗 `ui/candidates/view.rs` 画在拼音行下方(淡色小字)。host 测已加。
- [~] **⑤ 任务栏点中/英反同步**(★☆☆ / 低 / 0.5 天):**代码完成,待真机测**(2026-09-11)。
激活时对转换模式 compartment 挂 `ITfCompartmentEventSink`(`com/conversion.rs`),`OnChange` 读回 `NATIVE` 位、与当前模式不同才翻转
(防回环),顺带刷指示器 + 上报 Server 让悬浮状态条也同步。纯 DLL 改动、无新协议。
- [~] **符号面板**:代码完成,待真机测(2026-10-13)。这一版原生画(Direct2D,彩色 emoji),下一版换 qingjian-render;
按键与鼠标同 macOS,入口在悬浮状态条「符」格与托盘中 / 英图标的右键菜单。
- [ ] 发版:换 **Certum 开源代码签名证书**重签(开发全程自签 + 本机受信任根,见 `installer/sign-local.ps1`)、
`windows-v<版本>` 标签与 CI。
- [ ] **本地整句模型上 Windows**:Server 已接(`dispatch/rescore/`,CPU 推理,设置「云服务」页有开关,安装包带 `data\model`),待真机验:每次重排的耗时(前文 + 几条路径一次前向,CPU 上可能几十到一百多毫秒,超了就缩前文长度)、模型加载时间;
应用光标前文已接(DLL 起组句时读、密码框跳过;2026-09-12 真机验过记事本 / Edge / 终端都读得到,Edge 密码框按 `IS_PRIVATE` 识别),真机看沉浸式应用读不读得到;
模型单文件 `.qjm` 已做(2026-09-12,复用 `.qj` 容器 `Kind::Model`,`find_model` 先 `.qjm` 再三件套目录,`pack model` / `tools/release/pack-model.sh`,
data Release 传 `model.qjm`,bundle.sh / qingjian.iss 只带一个文件),待 mac 与 box 真机各装一次验加载与重排;
密码框已按 TSF 规范做(2026-09-12):`KEYBOARD_DISABLED` compartment 整键放行不组句,`IS_PRIVATE` / 密码 / PIN 输入范围为私密(组句但不学不记不发云端,`ClientMessage::Privacy` → `Engine::set_private`),box 真机验过:Edge 密码框整键放行;InPrivate 网页文本框报 `IS_SEARCH` 不报 `IS_PRIVATE`,私密路径只靠单测覆盖;CI 两个 job 都从 `data` Release 取 `model.qjm`(已做)。
- [ ] Linux Fcitx5 后续(默认面板与手动安装已实现):native Wayland 验证、Server 自绘 / GNOME 位图、神经重排、自动启动与打包;配置同步、跨平台词库
- [~] Linux 双框架(装的时候认 fcitx5 还是 IBus,两个都支持):IBus 前端 `apps/linux/ibus` 已能用——
socket 客户端、按键翻译、D-Bus 层(按键 / 焦点 / 重置 / 面板三样)都通了,对着真 ibus-daemon 验过。还差:
- 密码框与私密输入:`SetContentType` 的映射写了但**没验过**(测试里 IBus 一次都没调它),要找个真密码框试;验法见 [notes/linux-dual-frontend.md](../notes/linux-dual-frontend.md)
- 按应用设置:IBus 这条路上还没拿到应用标识,`OpenSession` 的 `app` 报 `None`,`[apps]` 分节对它不生效
- ~~`focus_out` 的 `client_preedit`~~:2026-10-15 改报 `true`,preedit 用 COMMIT 模式由框架留在原来的框里(X11);
GNOME Wayland 上改在快捷键交给应用前先原样上屏,鼠标换框仍会丢,见 [notes/linux-bringup.md](../notes/linux-bringup.md)
- ~~安装脚本按已装框架分支安装、Server 的启动策略~~:`install.sh --frontend auto` 已做,systemd 用户单元 `qingjian-server.service` 随装(`--enable-service` 顺手 enable),两个前端共用一个 Server
- `[general] preedit` 三档在 IBus 面板下逐个真机验(它的面板能力比 fcitx5 弱),坑见 [notes/linux-bringup.md](../notes/linux-bringup.md)
- [ ] 设置项的平台缺口(设置程序 `apps/settings/src/support/` 表里标「待实现」的项,输入法接上之前设置里不显示;测试逐条对照这里):
- [ ] 辅码:Linux
- [ ] 形码与自定义方案:Linux
- [ ] 默认英文模式:macOS
- [ ] 按应用记住中英模式:macOS、Linux
- [ ] 中文与英文、数字之间自动加空格:Linux
- [ ] 横排时 ↑ / ↓ 展开成多行:Linux
- [ ] 额外翻页键:Linux
- [ ] 高亮移动键:Linux
- [ ] Ctrl + . 切换全半角标点:Linux
- [ ] 双拼键位提示:Linux
- [ ] 拼音行显示声调:Linux
- [ ] 实验功能(知意、含章·知微):Linux
- [ ] 小键盘数字:macOS、Linux
## 四、其他输入方案
- [ ] 五笔(86 版):方案与分期见 [wubi.md](wubi.md),第一期 Core + CLI + Windows;
`[general] scheme` 收敛与配置迁移一起做(顺带解掉〇里的「配置文件版本迁移」)
- [ ] 自定义形码方案:Core / 平台 / CLI / Windows / macOS / 新版设置程序已做(2026-10-20,见 [wubi.md](wubi.md) 五之三),
剩 Windows 与 macOS 真机验顶字和满码自动上屏、Linux 壳接形码
- [ ] 复杂方案收尾(与上一条共用「输入方案」抽象):注音只在 Core 与 Windows 接了,macOS 侧还没接;双拼的方案切换要等 `[general] scheme`