Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resolver = "2"
members = ["crates/*"]

[workspace.package]
version = "1.2.0"
version = "1.2.1"
edition = "2021"
license = "GPL-3.0-or-later"
rust-version = "1.98"
Expand Down
2 changes: 1 addition & 1 deletion HANDOFF.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ make macos-offline-tests
- 2026-11-06 / pi(air):**B3 学习区实现(报告 253)**。`WubiLearningView` 改两行布局(完整码+简码 / 字根格+识别码两行),候选窗零改动;新增 `LearningHints`(读 `B0-runtime.tsv`,缺失退回 D14);词组按输入码位置映射到字(KWWL → 中K 华W 人W 国L)。`wubi-learning.swift` 扩到可注入资源并生成亮/暗实拍;离线回归全绿。
- 2026-11-06 / pi(air):**B2 数据地基(报告 252 / ADR-311)**。B0 扩到 3,000 字并预渲染成 `B0-runtime.tsv`(287,310 B ≈ 96 B/字,预算 512 KiB 反而有余量;B0.json 同规模是 1.62 MiB),登记 derived `b0-runtime`,新增 `test-b0-runtime.py` 守体积/格式/无 PUA/消费契约。ADR-311 定装载方式(bundle 内只读文件、宿主查表、Rust 不参与)。
- 2026-11-06 / pi(air):**1.2.0 B1 批完成(报告 251)**。D1 签名 tag 改 SSH key(白名单 `packaging/git-allowed-signers`,本地已验签);D2 CI 取 D2 拆字数据 + D17 简码表入库,B0 独立重算不再 skip;D5 perf/soak 绝对硬顶改 vmmap footprint;D6 站点改占位符 + `tools/stamp-site.py` + Pages 盖章;D4 延迟统计加 long-code/paging 两段;E2 soak 30 分钟档。未换包、未改输入行为;离线 61 文件 / 323 例 PASS。
- 2026-11-06 / pi(air):**1.2.0 迭代计划(`docs/迭代计划-1.2.0.md`)**。按"除平台扩张外全部收口"排成 6 批:B1 工程收口 → B2 数据地基 → B3 L3 提示 → B4 L4 练习 → B5 质量项(有证据才做)→ B6 数据扩张;只换一次包。原则:低风险先行、依赖链不打断、无证据的项明确关闭并写触发条件。可立即开始 B1 与 C1(互不阻塞)。
- 2026-11-06 / pi(air):**1.2.0 迭代计划(`docs/archive/迭代计划-1.2.0.md`)**。按"除平台扩张外全部收口"排成 6 批:B1 工程收口 → B2 数据地基 → B3 L3 提示 → B4 L4 练习 → B5 质量项(有证据才做)→ B6 数据扩张;只换一次包。原则:低风险先行、依赖链不打断、无证据的项明确关闭并写触发条件。可立即开始 B1 与 C1(互不阻塞)。
- 2026-11-06 / pi(air):**下一版积压梳理(`docs/待办与积压.md`)**。把 ROADMAP 未勾项、ADR 待定项、报告遗留与已知限制收成 A–G 七类,每项给证据/成本/依赖/授权;给出 1.2.0 三套套餐(A 工程收口+教学地基 / B 质量与门禁最小版 / C 平台扩张),推荐 A。需要用户拍三件事:套餐、签名 tag 是否启用、Windows spike 是否启动。
- 2026-11-06 / pi(air):**1.1.0 闭环 + air 输入源故障收尾**。用户在 pro 确认候选/切源正常;air 报「萤火虫不能用」经查是**被移出已启用输入源**(包、宿主、签名均健康),用户重新添加后恢复。把排查命令与「TIS 后台启用不持久化」写进 `docs/故障恢复.md` §4.1,HANDOFF 同步。
- 2026-11-06 / pi(air):**1.1.0 发布收口**。HANDOFF 发布列车改为「1.1.0 已发布 → 下一站 1.2.0」;ROADMAP 三条发布任务全部勾掉(自用豁免、tag/Release、站点、pro 升级),新增「1.2.0 候选」与「pro 本机实键入确认」。当前:main `730d894`、最新 tag `v1.1.0`、站点 `v1.1.0 · 构建 38`、air/pro 同包。
Expand Down
5 changes: 4 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
> 2026-11-06 对账过一轮:把已完成但未勾的行补齐(IT-15 / IT-22 / IT-23 / IT-25 / UI04-05 等),
> 仍未勾的只剩「确实没做」或「待裁定」两类。发布流程里的勾选对账见 §发布对账。

## 当前发布列车:1.2.0 候选已验收(2026-11-09)→ 待 tag/Release/站点
## 当前发布列车:1.2.1(补丁候选)← 1.2.0 已发布(2026-11-09)

- [x] 1.1.0 **自用 3 天**(用户 2026-11-06 显式豁免,记录见 `docs/releases/1.1.0.md` §3)
- [x] 1.1.0 **tag → Release**(tag `v1.1.0` → `393318c`;Release run `42225134493` success;ZIP `448d3170…` 与候选逐字节一致、DMG 公证通过、appcast `sparkle:version=38`;报告 248)
Expand All @@ -17,6 +17,9 @@
- [x] **1.2.0 装机反馈修正(报告 255)**:⌥L 在无候选窗时不再漏出 `¬`(组合键前移到客户端判定之前);拆字键位按 `positionMismatch` 截断降级(「我」→ `丿T 扌R ?N`);`trnt` 不自动上屏确认是「同码不唯一」的预期行为(我/特性/选择性)。
- [x] **1.2.0 B4 练习(ADR-313,报告 257)**:`Practice.swift`(只出 full 题、判分、识别码表、进度 TSV 有界原子写)+ `PracticeWindow.swift`(独立窗口,题型 A 看字打码 / C 识别码判断);新增配置 `hotkey.open_practice`(默认 ⌥K)。
- [x] **1.2.0 B5 质量收口(ADR-314,报告 258)**:A4 冷首键实测 ~28 ms(与学习区无关,用户不可感知);A1/A2/A3/A5 全部关闭并写触发条件;内存口径按 ADR-312 双阈值。
- [ ] **1.2.1 补丁候选**(Cargo 1.2.1 / build 40):安装体验(旧宿主重启询问、输入源缺失时打开设置页)、
练习页无障碍(VoiceOver 标签与播报)、回归并发默认 4;另含死代码/死资源清理与文档状态标注。
发布稿 `docs/releases/1.2.1.md`;tag 需授权。
- [x] **1.2.0 候选**(Cargo 1.2.0 / build 39,候选 `31fdbcd`、执行 `ef25e92b…`):B1 工程收口 → B2 数据地基 → B3 L3 提示 → B4 L4 练习 → B5 质量项 全部完成;
练习页四题型 + 键位图/口诀(ADR-316–323)、学习区改版(ADR-311)、签名 tag/站点盖章等工程项(报告 251–262)。
发版材料见 [`docs/releases/1.2.0.md`](docs/releases/1.2.0.md);tag 待授权。
Expand Down
Binary file removed assets/icons/yinghuo-icon-v4-menu-template.png
Binary file not shown.
Binary file removed assets/icons/yinghuo-official-icon-navy-v1.png
Binary file not shown.
10 changes: 6 additions & 4 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 萤火虫输入法 · 文档索引

> 当前状态只看 [`../HANDOFF.md`](../HANDOFF.md)|任务清单看 [`../ROADMAP.md`](../ROADMAP.md)|门禁看 [macOS 发布清单](macos-release-checklist.md)
> 当前状态只看 [`../HANDOFF.md`](../HANDOFF.md)|下一步看 [`待办与积压.md`](待办与积压.md)|历史任务清单看 [`../ROADMAP.md`](../ROADMAP.md)
> **文档状态**:本表为**当前有效**;`archive/`、`history/`、`design/`、`reviews/` 是历史证据,只读不改(需要时加"历史文档"标注)。
> **AI 代理**:先读 [`../AGENTS.md`](../AGENTS.md)(铁律、工作流、验证命令),再按本索引展开。

## 权威(当前有效)
Expand All @@ -23,9 +24,10 @@
|---|---|
| [MVP产品验收标准.md](MVP产品验收标准.md) | MVP 定义与门禁(IT-14/15/22/23) |
| [MVP单人验收清单.md](MVP单人验收清单.md) | 用户手动走查、五工作日试用、独立核验材料 |
| [macos-release-checklist.md](macos-release-checklist.md) | 发布清单:已关闭/未关闭门禁 |
| [macos-release-checklist.md](macos-release-checklist.md) | **历史**(0.1.0 首版清单);当前发版走 [更新发布流程](更新发布流程.md) |
| [更新发布流程.md](更新发布流程.md) · [更新源与镜像.md](更新源与镜像.md) | 发版流程与站点规则 |
| [releases/](releases/) | 每个版本的发布说明与实测结论:**1.2.0(候选)**、1.1.0、1.0.2、1.0.1、1.0.0、0.1.15、0.1.13 |
| [releases/](releases/) | 每个版本的发布说明与实测结论:**1.2.1(候选)**、1.2.0、1.1.0、1.0.2、1.0.1、1.0.0、0.1.15、0.1.13 |
| [待办与积压.md](待办与积压.md) | **剩余待办**(P0 补丁 / P1 教学与数据 / P2 有证据才做 / 明确不做) |
| [人工验收与多机复现.md](人工验收与多机复现.md) | 历史验收操作与双机复现步骤 |
| [验收协作清单.md](验收协作清单.md) | 换包验收时"谁做什么"、15 分钟窗口顺序 |

Expand Down Expand Up @@ -54,7 +56,7 @@
| [MVP后执行计划.md](MVP后执行计划.md) | **批次划分与执行顺序**(v1.0.0 之后先做什么) |
| [结构库第二阶段需求.md](结构库第二阶段需求.md) | corpus 需求清单:缺什么数据、准入规格、验收门槛(ADR-309/310) |
| [待办与积压.md](待办与积压.md) | **下一版范围来源**:A–G 七类积压项、成本/依赖、1.2.0 三套套餐建议 |
| [迭代计划-1.2.0.md](迭代计划-1.2.0.md) | **1.2.0 执行顺序**:B1–B6 六个批次、依赖链、完成标志与风险 |
| [迭代计划-1.2.0.md](archive/迭代计划-1.2.0.md) | **1.2.0 执行顺序**:B1–B6 六个批次、依赖链、完成标志与风险 |

## 设计稿

Expand Down
1 change: 1 addition & 0 deletions docs/archive/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
| [发布说明-0.1.15.md](发布说明-0.1.15.md) | 0.1.15 的用户版发布说明底稿。**自 1.0.0 起改为 `docs/releases/<版本>.md`** |
| [技术方案-v0.2-Rust.md](技术方案-v0.2-Rust.md) · [v0.3](技术方案-v0.3.md) · [v0.4](技术方案-v0.4.md) · [v0.5](技术方案-v0.5.md) | 技术方案历史稿,结论已并入 [`../技术方案.md`](../技术方案.md) |
| [技术架构方案.md](技术架构方案.md) · [中文输入法调研.md](中文输入法调研.md) | 早期架构讨论与竞品调研,仅作背景 |
| [迭代计划-1.2.0.md](迭代计划-1.2.0.md) | 1.2.0 的批次划分与验收口径,B1–B5 已完成并随 `v1.2.0` 发布 |

**归档约定**

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> **历史文档(2026-11-09 归档)**:1.2.0 已发布(tag `v1.2.0`),本计划的 B1–B5 全部完成,
> 保留作为批次划分与验收口径的记录。当前待办见 [docs/待办与积压.md](../待办与积压.md)。

# 1.2.0 迭代计划(顺序与批次)

> 2026-11-06。目标:**除平台扩张(F)外,把 `docs/待办与积压.md` 里的积压项在 1.2.0 周期内"做完或明确关闭"**,
Expand Down
4 changes: 4 additions & 0 deletions docs/macos-release-checklist.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
> **历史文档(2026-11-09 标注)**:这是**首版 0.1.0** 的发布前清单,已由
> [更新发布流程](更新发布流程.md) 与 [AGENTS.md §6](../AGENTS.md) 的发布步骤取代;
> 文中包身份、日期与"进行中"状态都属历史,不能作为当前任务或通过证据。

# macOS 首版发布前清单

> 2026-10-18:0.1.0 正式包已由 `macos-acceptance` 流程产出并通过签名/公证核验(`ba6d796`,执行 SHA `a234ef31…`),B 已装并实测菜单/循环/快捷键;A 已装并以新源方式注册(TIS 选中成功、系统日志有 `Activate Server`/`Menu`),菜单外观待肉眼确认。正式报告仍是旧包 `abdb83f` 的 1 PASS / 22 BLOCKED,需对 `a234ef31` 重跑。复盘与改进项见 `docs/reviews/069-iteration-retrospective.md`。
Expand Down
32 changes: 32 additions & 0 deletions docs/releases/1.2.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 1.2.1(build 40)

> **状态:候选开发中(2026-11-09)**——P0 补丁档:安装体验与练习页无障碍;不改候选顺序、不改引擎行为。
> 发布材料在打 tag 后回填资产与回读结果。

## 1. 内容(相对 1.2.0)

| 项 | 变化 |
|---|---|
| **覆盖安装后旧宿主** | 安装器检测到仍有宿主跑在被移走的备份 inode 时:交互式安装会询问是否重启(`LAMPYRIS_RESTART_HOST=1` 可自动),不再只打印"重新登录" |
| **输入源缺失** | 安装尾部(`LampyrisTIS` 回读未通过)时给出恢复步骤,并在交互式/`LAMPYRIS_OPEN_SETTINGS=1` 时直接打开「键盘 → 文字输入」设置页 |
| **练习页无障碍** | 作答格有 `textField` 角色与实时值、进度条有数值、判分结果用 VoiceOver 播报;键位图有说明性 help 文本 |
| **回归稳定性** | 离线回归默认并发 4(Swift 编译不再互相抢资源导致假超时);个别测试的超时上限提到 180s |
| **文档** | `docs/故障恢复.md` 新增 §4.4(Terminal 里 ⌥L 被终端吞掉);完成态计划归档、索引与待办对齐;删除死代码与死资源(见下) |

## 2. 清理(不改变行为)

- 删除 `PracticeRootRowView`(练习改版后已无引用)。
- 删除未使用成员:`PracticeWindow.iconButton/toolbarButtons/answerHeight`、`PracticeQuestion.rootHint`、
`KeyboardMapView.accessibilitySummary`、`PracticeAnswerView.setTextForTesting`。
- 删除零引用资源:`assets/icons/yinghuo-icon-v4-menu-template.png`、`assets/icons/yinghuo-official-icon-navy-v1.png`。
- 删除零引用脚本:`platforms/macos/tests/run-selection-probe.py`。
- `docs/迭代计划-1.2.0.md` → `docs/archive/`;`docs/macos-release-checklist.md` 标注为历史文档。

## 3. 验收计划

- `make verify` + 离线回归全绿(无行为改动,回归是主要防线)。
- 装机复验:覆盖安装后宿主是否自动重启、输入源缺失提示是否出现、练习页 VoiceOver 是否读出题面与结果。

## 4. 已知限制

与 1.2.0 相同(三级简码未提供、冷首键 ~28 ms、学习区 +~3 MiB 等),见 [1.2.0](1.2.0.md) §5。
2 changes: 1 addition & 1 deletion docs/reviews/253-b3-learning-area.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@

## 6. 关联

ADR-311、`docs/design/l3-hint.md`、`docs/迭代计划-1.2.0.md`、报告 252。
ADR-311、`docs/design/l3-hint.md`、`docs/archive/迭代计划-1.2.0.md`、报告 252。
47 changes: 47 additions & 0 deletions docs/reviews/263-1.2.1-audit-cleanup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 263 · 1.2.1 补丁与代码/文档审计清理

- 日期:2026-11-09
- 范围:P0 补丁档(安装体验、练习页无障碍、回归稳定性)+ 全仓库死代码/死资源/死文档审计
- 结论:**行为面只动安装与无障碍;清理全部为删除零引用物**。`make verify` 与离线回归在全过程每一步后复跑。

## 1. P0 修复

| 项 | 改动 | 证据 |
|---|---|---|
| 覆盖安装后旧宿主仍在跑备份 inode | `install.sh` 检测到后:交互式询问是否重启;`LAMPYRIS_RESTART_HOST=1` 自动重启;非交互只提示命令 | 本轮复现两次(进程执行路径落在 `install-backup-…`) |
| 输入源被移出启用列表 | 安装尾部 `LampyrisTIS` 回读失败时给出恢复步骤;交互式或 `LAMPYRIS_OPEN_SETTINGS=1` 时打开「键盘 → 文字输入」设置页。**不写系统偏好**(TIS 后台启用不持久化) | `docs/故障恢复.md` §4.1/§4.3 |
| 练习页无障碍 | 作答格:`textField` 角色 + 实时值 + 帮助文本;进度条:数值;判分结果用 `announcementRequested` 播报;键位图补 help | 代码内 `setAccessibility*` |
| 回归假超时 | 离线回归默认并发 `min(4, cpu)`;受影响测试的编译上限 45/90s → 180s | 6 并发实测曾连续 5 个文件超时 |
| Terminal 里 ⌥L 被吞 | 新增 `docs/故障恢复.md` §4.4(现象/原因/处理) | 报告 255 §7 |

## 2. 代码清理(零引用)

| 删除 | 依据 |
|---|---|
| `platforms/macos/Sources/PracticeRootRowView.swift` | 练习改为 `PracticeExplanationView` 后无任何引用(7 个测试清单 + dev-preview 同步移除) |
| `PracticeWindow.iconButton/toolbarButtons/answerHeight` | 动作迁到 `NSToolbar` 后不再调用 |
| `PracticeQuestion.rootHint` | 讲解区改结构化展示后无调用 |
| `KeyboardMapView.accessibilitySummary` | 面板已提供标签,旧摘要无人调用 |
| `PracticeAnswerView.setTextForTesting` | 测试改用 `keyEvent` 注入 |
| `assets/icons/yinghuo-icon-v4-menu-template.png`、`yinghuo-official-icon-navy-v1.png` | 全仓库零引用(构建用 `yinghuo-official-app.icns`) |
| `platforms/macos/tests/run-selection-probe.py` | 全仓库零引用(同类能力由 `selsrc.swift` / `isolated-imk.py` 覆盖) |

## 3. 文档整理

| 动作 | 说明 |
|---|---|
| `docs/迭代计划-1.2.0.md` → `docs/archive/` | 1.2.0 已发布,B1–B5 全部完成;归档并在 `archive/README.md` 登记、引用处改路径 |
| `docs/macos-release-checklist.md` 加“历史文档”标注 | 0.1.0 首版清单,已被 `更新发布流程.md` 取代;保留以维持历史链接 |
| `docs/README.md` 重写状态说明 | 明确“当前有效 vs 历史证据(archive/history/design/reviews)”;索引补 `待办与积压.md`、`releases/` 状态 |
| `docs/reviews/README.md` | 补齐 225–263 的阶段划分与“现在还差什么”的正确入口 |
| `docs/待办与积压.md` | 重排为 P0/P1/P2/明确不做,并归档 1.2.0 完成范围 |
| `docs/故障恢复.md` | 新增 §4.3(输入源未选中)/§4.4(Terminal 吞 ⌥L) |

**刻意保留**:`docs/design/`(21 MB 历史截图)、`docs/reviews/`(过程证据)、`docs/history/`、
`docs/archive/`。它们是发布/验收的可追溯证据,删除会让历史报告失去引用对象;如需瘦身应单独决策(不在本次范围)。

## 4. 复验

- 每一步删除后跑 `make verify` 与离线回归;最终 `make macos-offline-tests`:**62 文件 / 328 例 PASS**(4 并发)。
- `platforms/macos/dev-preview.sh --build-only` 通过(AppKit 面编译验证)。
- 版本推进到 **1.2.1 / build 40**,发布稿 `docs/releases/1.2.1.md`;tag 需用户授权。
6 changes: 5 additions & 1 deletion docs/reviews/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,13 @@
| 学习区与教学 | 071–110 | 学习区上下对应、长词、紧凑学习区、拆字说明 |
| 安装/更新/卸载 | 111–200 | 安装器、更新程序、自卸载、配置恢复 |
| 1.0.0 收尾 | 201–224 | 见上表 |
| 1.1.0 发布线 | 225–250 | 简码/排序、验收成本、延迟归因、1.1.0 发布与站点 |
| 1.2.0 候选与发布 | 251–262 | B1 门禁、B0 运行时、学习区、练习四题型与键位图、1.2.0 发布 |
| 1.2.1 清理 | 263 | 安装/无障碍补丁、死代码与文档审计 |

## 4. 常见查找

- **"这个行为当初为什么这样定"** → 先查 [决策记录](../决策记录.md)(ADR 是冻结决策,报告是过程证据)。
- **"某版包到底是什么"** → 查该版 `docs/releases/*.md` 与对应报告里的 ZIP/执行 SHA。
- **"现在还差什么"** → `ROADMAP.md` + [macos-release-checklist](../macos-release-checklist.md) + `HANDOFF.md`,**不要**从报告里推断当前状态。
- **"现在还差什么"** → [`docs/待办与积压.md`](../待办与积压.md) + `ROADMAP.md` + `HANDOFF.md`,**不要**从报告里推断当前状态。
(`macos-release-checklist.md` 是 0.1.0 时代的历史清单,已标注为历史文档。)
Loading
Loading