diff --git a/HANDOFF.md b/HANDOFF.md index 5952c8c7..c0f3c2ee 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -5,7 +5,8 @@ - 更新:2026-11-09 / pi(**air 本机**)。阶段:**1.2.0 已发布并上线**(tag `v1.2.0` → `31fdbcd`,站点 `v1.2.0 · 构建 39`,air 与 pro 同包 1.2.0/39)。 - 分支:`dev` = `main` = `31fdbcd`(1.2.0 候选提交);开放 PR **0 个**。 - 版本:`Cargo.toml` = **1.2.0**、`packaging/build-number` = **39**;最新 tag **`v1.2.0`**(Release 已发布)。 -- 最近验证:`make verify` PASS(232 产物零网络符号)、`make macos-offline-tests` **62 文件 / 328 例 PASS**、`modules/keymap/tests/test-key-roots.py` **8 例 PASS**。 +- 最近验证:`make verify` PASS(325 产物零网络符号)、`make macos-offline-tests` **62 文件 / 328 例 PASS**、`modules/keymap/tests/test-key-roots.py` **8 例 PASS**。 +- 1.2.1 身份:提交 `168115e`、ZIP `102f4928…`、DMG `a6f4bdbd…`、更新程序 `b04049e3…`、appcast `40`、包内执行 `3eeeb0aa2ae4be0facd0120c854ea822ad1ba749dd3a22611f39a97db6fc32d9`(`docs/releases/1.2.1.md`)。 - 1.2.0 候选身份:提交 `31fdbcd`、ZIP `64eeb90f…`、源码 `3dc6f717…`、宿主执行 `ef25e92ba085ea3f556e12d477fb1b6a6cd08ebbc3b74897fdb7b2d9f6eead64`(`docs/releases/1.2.0.md`)。 ## 1. 设备与数据 @@ -55,7 +56,7 @@ 剩余待办已重排到 **`docs/待办与积压.md`**(2026-11-09 版),分四档: -- **P0 · 1.2.1 补丁档**:覆盖安装丢输入源(安装器交互化)、旧宿主跑备份 inode(安装器主动重启确认)、练习页无障碍走查、Terminal ⌥L 冲突写入用户文档、回归编译超时治理。 +- **P0 · 1.2.1 已完成并发布**:安装器交互(`LAMPYRIS_RESTART_HOST`/`LAMPYRIS_OPEN_SETTINGS`/`LAMPYRIS_FORCE_INSTALL`)、旧宿主检测、练习页 VoiceOver、Terminal ⌥L 文档、回归并发与超时治理;附带零引用代码/资源清理与 CI 去 `install-action`。剩余交接项见 `docs/待办与积压.md`。 - **P1 · 1.3.0 教学/数据**:三级简码专项(需引擎 + ADR)、corpus M2-1 调研、字根字形身份库、真笔顺/结构标注、拆字说明扩充、多方案码表。 - **P2 · 有证据才做**:排序观察期、位置记忆、冷首键、拼音后端评估、n-gram(都写了触发条件)。 - **明确不做**:云/账号/广告/统计/剪贴板/语音;平台扩展单独立项,不与 macOS 同批。 @@ -66,11 +67,12 @@ | 步骤 | 内容 | 授权 | |---|---|---| -| 1 | ~~打 SSH 签名 tag `v1.2.0` → Release~~ | ✅ 2026-11-09(tag 验签通过;Release run `42558833917` success) | +| 1 | ~~打 SSH 签名 tag `v1.2.1` → Release~~ | ✅ 2026-11-09(tag 验签通过;Release run `42583547089` success) | | 2 | ~~回读 Release 资产并回填~~ | ✅ ZIP `64eeb90f…` 与候选逐字节一致、DMG 公证、appcast `39`、更新程序 1.2.0 已公证 | | 3 | ~~dispatch Pages → 回读站点~~ | ✅ `v1.2.0 · 构建 39`(run `42560197671`) | | 4 | ~~pro 升级到 1.2.0~~ | ✅ payload `64eeb90f…` 验签通过、执行 `ef25e92b…`、config `b8c7a351…` 与 962 行词库未变;旧包备份在 `updates/upgrade-20261109T121300-9c1061c4/`(宿主已重启) | -| 5 | 后续小版本:安装器交互(lsregister + 提示用户重加输入源)、三级简码数据(需 ADR)、练习深色/无障碍走查 | 排 1.2.1 | +| 5 | pro 升级到 1.2.1 | **用户自行执行**(`packaging/macos/upgrade.py`) | +| 6 | 下一站 1.3.0:三级简码(需引擎 + ADR)、corpus M2-1 调研 | 见 `docs/待办与积压.md` P1 | ## 4.1 换到 air 后怎么开工 @@ -112,6 +114,7 @@ make macos-offline-tests ## 9. 会话日志(最近) +- 2026-11-09 / pi(air):**1.2.1 发布完成(报告 263)**。P0 三项(安装器旧宿主/输入源、练习页 VoiceOver、回归并发)、零引用代码与资源清理、文档状态标注一并入 `168115e`;期间 `main` 两次 CI 红灯查为 `install-action` 下载 `cargo-deny` 资产 504,改自建 `scripts/install-cargo-deny.sh`(重试 + crates.io 回退)。`git tag -s v1.2.1` → Release `42583547089` success,ZIP `102f4928…` 与验收包逐字节一致、DMG `a6f4bdbd…` 公证、更新程序 1.2.1、appcast `40`;air 用发布包覆盖安装(执行 `3eeeb0aa…`,安装器回读「已注册到输入源」,无需重加输入源);Pages `v1.2.1 · 构建 40`。**pro 由用户自行升级。** - 2026-11-09 / pi(air):**1.2.0 发布完成**。`git tag -s v1.2.0 31fdbcd`(SSH 验签通过)→ 首次 Release 失败于"checkout 把 tag 建成轻量引用",补 `git fetch --force` 后 `workflow_dispatch` 重跑成功。回读:ZIP `64eeb90f…`(与候选逐字节一致)、源码 `3dc6f717…`、DMG `ffa1a65c…`(staple+spctl Notarized)、更新程序 `332d98b1…`(1.2.0 已公证)、appcast `sparkle:version=39`;包内执行 `ef25e92b…` = 已装机版本。随后完成 Pages 部署(站点回读 `v1.2.0 · 构建 39`)与 pro 升级(1.1.0/38 → 1.2.0/39,验签通过、config 与 962 行词库未变、旧包已备份、宿主重启)。**1.2.0 发布闭环完成。** - 2026-11-09 / pi(air):**1.2.0 候选通过验收 + 发版材料**。候选 `31fdbcd`(执行 `ef25e92b…`)全绿(`make verify` 232 产物零网络、离线 62 文件 / 328 例、CI 四项);用户确认练习页四题型/四位输入格/键位点亮与位次/口诀/工具栏/亮暗外观均可。写 `docs/releases/1.2.0.md`(候选身份、行为变更=二级简码 598 条、学习区与练习、键位图与口诀、工程项、已知限制),ROADMAP/HANDOFF 对账。**等待用户授权 tag/Release/Pages/pro 升级**。 - 2026-11-06 / pi(air):**1.2.0(B4+B5)候选装机(报告 259)**。PR #232 → CI 包(`exec 28e24d26…`)装 air;稳态 p95 **5.80 ms**(三段 5.12–5.97)、冷首键 28.86/33.39、0 外联、memory-gate 私有 **28.5–28.8 MiB**(限 30)PASS。待用户走查:⌥K 练习窗口(A/C 两种题型)、⌥L 学习区默认关、practice.tsv 生成与重置。 diff --git a/ROADMAP.md b/ROADMAP.md index 09ee3f69..e1a08e2f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,7 +5,7 @@ > 2026-11-06 对账过一轮:把已完成但未勾的行补齐(IT-15 / IT-22 / IT-23 / IT-25 / UI04-05 等), > 仍未勾的只剩「确实没做」或「待裁定」两类。发布流程里的勾选对账见 §发布对账。 -## 当前发布列车:1.2.1(补丁候选)← 1.2.0 已发布(2026-11-09) +## 当前发布列车:1.2.1 已发布(2026-11-09)→ 下一站 1.3.0 - [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) @@ -17,9 +17,13 @@ - [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.1 补丁候选**(Cargo 1.2.1 / build 40,提交 `168115e`):安装体验、练习页无障碍、回归并发默认 4、 + 零引用代码/资源清理、文档状态标注、CI 去掉 `install-action`。验收包 run `42582280403`。 +- [x] **1.2.1 tag → Release**:`git tag -s v1.2.1`(SSH 验签通过)→ run `42583547089` success; + ZIP `102f4928…` 与验收包逐字节一致、DMG `a6f4bdbd…` 公证通过、更新程序 `b04049e3…` 1.2.1、appcast `40`(报告 263)。 +- [x] **1.2.1 站点上线**:Pages run `42584146927` → 回读 `v1.2.1 · 构建 40`。 +- [x] **1.2.1 air 装机**:发布包覆盖安装,宿主执行 `3eeeb0aa…` 与包内一致,安装器回读「已注册到输入源」。 +- [ ] **1.2.1 pro 升级**:用户自行执行(`packaging/macos/upgrade.py`),不在本列车代为操作。 - [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 待授权。 diff --git a/docs/releases/1.2.1.md b/docs/releases/1.2.1.md index 6764a792..a5bed9d1 100644 --- a/docs/releases/1.2.1.md +++ b/docs/releases/1.2.1.md @@ -1,7 +1,7 @@ # 1.2.1(build 40) -> **状态:候选开发中(2026-11-09)**——P0 补丁档:安装体验与练习页无障碍;不改候选顺序、不改引擎行为。 -> 发布材料在打 tag 后回填资产与回读结果。 +> **状态:已发布(2026-11-09)**——补丁档:安装体验与练习页无障碍;不改候选顺序、不改引擎行为。 +> 提交 `168115e`、tag `v1.2.1`(SSH 签名验签通过)、Release run `42583547089` success、站点 `v1.2.1 · 构建 40`。 ## 1. 内容(相对 1.2.0) @@ -22,10 +22,23 @@ - 删除零引用脚本:`platforms/macos/tests/run-selection-probe.py`。 - `docs/迭代计划-1.2.0.md` → `docs/archive/`;`docs/macos-release-checklist.md` 标注为历史文档。 -## 3. 验收计划 +## 3. 验收与发布 -- `make verify` + 离线回归全绿(无行为改动,回归是主要防线)。 -- 装机复验:覆盖安装后宿主是否自动重启、输入源缺失提示是否出现、练习页 VoiceOver 是否读出题面与结果。 +| 项 | 值 | +|---|---| +| 提交 / tag | `168115e` / `v1.2.1`(SSH 签名,`SHA256:2v/lIBdSeJiR7zpmohlUjvtTeb3NIFpMQkiGqcFFbgY`) | +| 候选验收包 | `macOS Acceptance Package` run `42582280403` success(ZIP 与 Release 资产逐字节一致) | +| ZIP | `102f4928498e66d74bac585a66080d8f324ea45c68b26234e3e3c8551b0fff78`(7,268,933 B) | +| 源码 | `ec5fd2faefb68eed8873bff558fe9eed5c68355c44425270c164cfd6d9b419d1` | +| DMG | `a6f4bdbd60841cb02d4ff02d55ba566be1a655dbf7a6b647e361c682e1894646`(staple + spctl `Notarized Developer ID`) | +| 更新程序 | `b04049e3666a1e309a0f3dae57417e30d4d1a570d9907880ecd776b1dbf07ae0`(`LampyrisUpdateCheck 1.2.1`,spctl 通过) | +| appcast | `4764659c23edf31c67ab1dec8ed12c3ad676e54b108be00fd0420c5f1593c985`(`sparkle:version="40"`) | +| 包内执行 | `3eeeb0aa2ae4be0facd0120c854ea822ad1ba749dd3a22611f39a97db6fc32d9`(= air 已装机版本) | +| 站点 | Pages run `42584146927` success → 回读 `v1.2.1 · 构建 40` | + +**验证**:`make verify` PASS(325 产物零网络符号);离线回归 **62 文件 / 328 例 PASS**;CI `check/fuzz/dco/macos` 全绿。 +**装机实测**:用发布包覆盖安装后安装器输出「已注册到输入源」,无需重新添加输入源;宿主执行 SHA 与包内一致。 +**pro**:用户自行升级(本版不再代为升级)。 ## 4. 已知限制