diff --git a/HANDOFF.md b/HANDOFF.md index ab900fa4..f95f1617 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -4,7 +4,7 @@ - 更新:2026-11-14 / Claude Code(**air 本机**)。阶段:**已发布 1.3.0 / build 43**(tag `v1.3.0`,Release、站点已上线); air 与 pro 均已装发版产物(执行 `9cb738c9…`),30/30 样本、性能、内存、IT-22 A 档 / N1–N5 全部 PASS。 -- 分支:`main` = `a4f6a9c`(PR #312 cjk-decomp 83 条已合入);`dev` = `cd9fa2b` + 后续文档。 +- 分支:`main` = `343ce01`(PR #313 统一拆字标准 v1 已合入);`dev` = `05f25d1` + 后续文档。 - 版本:`Cargo.toml` = **1.3.0**、`packaging/build-number` = **43**;最新 tag **`v1.3.0`**。**下次正式发版前必须重新绑定候选身份。** - 最近验证:`make verify` PASS(528 产物零网络符号)、`make macos-offline-tests` **67 文件 / 335 例 PASS**、`build.sh --strict` PASS、 `tools/check-level3-codes.py` PASS(3,362 条)。 @@ -33,7 +33,7 @@ | **B0 schema v3(报告 243)** | 占位组件 `null` + 键位推断;修掉 D3 字根按字符解析(空格混入组件、BOM/CRLF)缺陷。 | | **13% 结构不一致归因(报告 242)** | 66/512 是两套**分类口径**差异(独体字判杂合、拆法不同、包围),不是数据错误;处置=五笔识别码为权威、IDS 只作校验、差异归档。 | | **corpus 数据来源调研(`docs/research/corpus-data-sources.md`)** | 主选 `yi-bai/ids`(MIT)+ Unihan 交叉校验;**不采用** Make Me a Hanzi 的 Arphic 图形、Hanzi Writer、KanjiVG、字典抓取。 | -| **B0 现状(schema v7,2026-11-15)** | 1,000 字:`full` **910** / `partial` **86** / `unknown` **4**。3,000 字:`full` **2,554** / `partial` **292** / `unknown` **154**;运行时同。标准 v1(ADR-358)下 `full` 必须通过标准字根/键位校验;报告 280–284。 | +| **B0 现状(schema v7,2026-11-15)** | 1,000 字:`full` **916** / `partial` **80** / `unknown` **4**。3,000 字:`full` **2,578** / `partial` **268** / `unknown` **154**;运行时同。标准 v1(ADR-358)下 `full` 必须通过标准字根/键位校验;98/新世纪仅预留 profile,不实现;报告 280–284。 | ### 2.2 发布线(2026-11-05,1.0.0 → 1.1.0/build 38) @@ -132,6 +132,9 @@ make macos-offline-tests ## 9. 会话日志(最近) +- 2026-11-15 / Claude Code(air):**PR #313 已合入 main(343ce01)**。统一拆字标准 v1 落地; + B0 3,000 字 `full` 2,578 / `partial` 268 / `unknown` 154;1,000 字 `full` 916。 + 98/新世纪复用校验逻辑,但需各自的字根/码表 profile。 - 2026-11-15 / Claude Code(air):**统一拆字标准 v1(ADR-358,报告 284)**。新增 `docs/standards/wubi-decomposition.md` 和 237 条标准字根清单;B0 schema v7 增加 `scheme`/`standardVersion`,`full` 必须无标准字根/键位不符。3,000 字 `full` 2,554、 diff --git a/ROADMAP.md b/ROADMAP.md index 76d5139c..83a4ceb3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -336,8 +336,8 @@ ADR-147:Terminal正常实际提交“你”及wq前缀确认后的failure/INT/ 交叉校验;不采用无许可五笔字根字体。N1-d 已更正并接入:3,000 字可定位 79 个 D2 补充区 PUA, 按 `(PUA, 键位)` 核验 66 条(verified 58 / partial 8 / unresolved 13);运行时 full 1,904→2,454。 N2/N3/N4 已落地(ADR-355/356,报告 281/282):56 个成字字根真实笔顺、结构覆盖 2,766 条、8 个 D2 漏拆补齐; - 统一拆字标准 v1(ADR-358)后 B0 full 2,554(85.1%)、运行时 full 2,554,仍未达 ≥98%; - 剩余 154 个 unknown;标准要求 full 逐组件通过标准字根/键位校验,98/新世纪需各自 profile。 + 统一拆字标准 v1(ADR-358)后 B0 full 2,578(85.9%)、运行时 full 2,578,仍未达 ≥98%; + 剩余 154 个 unknown;标准要求 full 逐组件通过标准字根/键位校验;98/新世纪仅预留 profile,当前不实现。 验收=高频 3,000 字 ≥98% 可解释、许可齐全、体积/延迟实测、模块内可独立构建。 不属于发布阻塞;若要优化,先用 phase 钩子确认宿主侧占比,再决定是否立门禁。 - [x] **整句/长词(n-gram)关闭(2026-11-14)**:ADR-352 + 报告 277/278 原型实测; diff --git a/data/generated/B0-runtime.tsv b/data/generated/B0-runtime.tsv index 6407c9da..61152ca2 100644 --- a/data/generated/B0-runtime.tsv +++ b/data/generated/B0-runtime.tsv @@ -160,7 +160,7 @@ 带 gkph full 一:g 〣:k 冖:p 丨:h 进 fjpk full 二:f 刂:j 辶:p K|竖|杂合 fj 先 tfqb full 丿:t 土:f 儿:q B|折|上下 -应 yid partial 广:y +应 yid partial 广:y 丷:i 吧 kcn full 口:k 巴:c N|折|左右 kc 县 egcu full 月:e 一:g 厶:c U|捺|上下 心 nyny full 心:n ny @@ -227,7 +227,7 @@ 近 rpk full 斤:r 辶:p K|竖|杂合 rp 杀 qsu full 乂:q 木:s U|捺|上下 清 igeg full 氵:i 主:g 月:e G|横|左右 -学 ipbf partial F|横|上下 ip +学 ipbf full 丷:i 冖:p 子:b F|横|上下 ip 强 xkjy full 弓:x 口:k 虫:j Y|捺|左右 xk 写 pgng full 冖:p 一:g ㄅ:n 一:g 既 vcaq partial 彐:v 厶:c 七:a @@ -298,7 +298,7 @@ 电 jnv full 日:j 乚:n V|折|杂合 jn 锛 qdfa full 钅:q 大:d 十:f 廾:a 条 tsu full 夂:t 木:s U|捺|上下 ts -剑 wgij partial 人:w 一:g +剑 wgij full 人:w 一:g 丷:i 刂:j 神 pyjh full 礻:p 丶:y 日:j 丨:h 动 fcln partial 二:f 厶:c 力:l 湖 ideg full 氵:i 古:d 月:e G|横|左右 @@ -424,7 +424,7 @@ 股 emcy full 月:e 几:m 又:c Y|捺|左右 象 qjeu partial ⺈:q U|捺|上下 古 dghg full 古:d -跳 khiq partial 口:k 止:h +跳 khiq partial 口:k 止:h 儿:i 某 afsu full 艹:a 二:f 木:s U|捺|上下 惊 nyiy full 忄:n 亠:y 小:i Y|捺|左右 搞 rymk full 扌:r 亠:y 冂:m 口:k @@ -519,7 +519,7 @@ 封 fffy full 土:f 土:f 寸:f Y|捺|左右 谈 yooy full 讠:y 火:o 火:o Y|捺|左右 诸 yftj full 讠:y 土:f 丿:t 日:j -觉 ipmq partial +觉 ipmq partial 丷:i 冖:p ㄇ:m 团 lfte full 囗:l 才:f 丿:t E|撇|杂合 肉 mwwi full 冂:m 人:w 人:w I|捺|杂合 期 adwe full 艹:a 三:d 八:w 月:e @@ -537,7 +537,7 @@ 愿 drin full 厂:d 白:r 小:i 心:n 墓 ajdf full 艹:a 日:j 大:d 土:f 世 anv full 廿:a 乚:n V|折|杂合 an -举 iwfh partial H|竖|左右 +举 iwfh full 丷:i 八:w 二:f H|竖|左右 殿 nawc full 尸:n 龷:a 八:w 又:c 帮 dtbh full 三:d 丿:t 阝:b 丨:h dt 抓 rrhy full 扌:r ⺁:r 丨:h Y|捺|左右 @@ -702,7 +702,7 @@ 苦 adf full 艹:a 古:d F|横|上下 绝 xqcn full 纟:x ⺈:q 巴:c N|折|左右 翻 toln full 丿:t 米:o 田:l 羽:n -逃 iqpv partial V|折|杂合 +逃 iqpv full 儿:i 儿:q 辶:p V|折|杂合 唐 yvhk full 广:y 彐:v 丨:h 口:k 春 dwjf full 三:d 人:w 日:j F|横|上下 dw 闻 ubd full 门:u 耳:b D|横|杂合 ub @@ -772,7 +772,7 @@ 横 samw full 木:s 龷:a 由:m 八:w 亮 ypmb full 亠:y 冖:p 几:m B|折|上下 套 ddu full 大:d 镸:d U|捺|上下 -兴 iwu partial iw +兴 iwu partial 丷:i iw 步 hir full 止:h 少:i R|撇|上下 hi 仙 wmh full 亻:w 山:m H|竖|左右 wm 雪 fvf full 雨:f 彐:v F|横|上下 fv @@ -876,7 +876,7 @@ 松 swcy full 木:s 八:w 厶:c Y|捺|左右 辽 bpk full 了:b 辶:p K|竖|杂合 bp 旗 ytaw full 方:y 𠂉:t 艹:a 八:w -绿 xviy partial 纟:x 彐:v Y|捺|左右 xv +绿 xviy full 纟:x 彐:v 氺:i Y|捺|左右 xv 痛 ucek full 疒:u マ:c 用:e K|竖|杂合 准 uwyg full 冫:u 亻:w 隹:y G|横|左右 乐 qii partial qi @@ -986,7 +986,7 @@ 奖 uqdu full 丬:u 夕:q 大:d U|捺|上下 术 syi full 木:s 丶:y I|捺|杂合 sy 涔 imwn full 氵:i 山:m 人:w 乛:n -棣 sviy partial 木:s 彐:v Y|捺|左右 +棣 sviy full 木:s 彐:v 氺:i Y|捺|左右 哼 kybh full 口:k 亠:y 了:b H|竖|左右 夺 dfu full 大:d 寸:f U|捺|上下 df 猪 qtfj full 犭:q ノ:t 土:f 日:j @@ -1070,7 +1070,7 @@ 糕 ougo full 米:o 丷:u 王:g 灬:o 斜 wtuf partial 人:w 秦 dwtu full 三:d 人:w 禾:t U|捺|上下 -挑 riqn partial 扌:r N|折|左右 +挑 riqn full 扌:r 儿:i 儿:q N|折|左右 擦 rpwi full 扌:r 宀:p 癶:w 小:i 瞎 hpdk full 目:h 宀:p 三:d 口:k hp 亭 ypsj full 亠:y 冖:p 丁:s J|竖|上下 @@ -1390,13 +1390,13 @@ 孝 ftbf full 土:f 丿:t 子:b F|横|上下 纹 xyy full 纟:x 文:y Y|捺|左右 疼 utui full 疒:u 夂:t 丷:u I|捺|杂合 -誉 iwyf partial +誉 iwyf partial 丷:i 洪 iawy full 氵:i 龷:a 八:w Y|捺|左右 剩 tuxj full 禾:t 丬:u 匕:x 刂:j 岃 mvyu full 山:m 刀:v 丶:y U|捺|上下 零 fwyc full 雨:f 人:w 丶:y 厶:c 坤 fjhh full 土:f 日:j 丨:h H|竖|左右 -录 viu partial 彐:v U|捺|上下 vi +录 viu full 彐:v 氺:i U|捺|上下 vi 臭 thdu full 丿:t 目:h 犬:d U|捺|上下 割 pdhj full 宀:p 三:d 丨:h 刂:j 棺 spnn partial 木:s 宀:p N|折|左右 @@ -1530,7 +1530,7 @@ 资 uqwm full 冫:u ⺈:q 人:w 贝:m 鲁 qgjf full 鱼:q 一:g 日:j F|横|上下 庄 yfd full 广:y 土:f D|横|杂合 -爆 ojai partial 火:o 日:j 龷:a +爆 ojai full 火:o 日:j 龷:a 氺:i 掩 rdjn full 扌:r 大:d 日:j 乚:n 祖 pyeg full 礻:p 丶:y 月:e 一:g 饱 qnqn full ⺈:q 乚:n 勹:q 巳:n @@ -1589,7 +1589,7 @@ 锁 qimy full 钅:q ⺌:i 贝:m Y|捺|左右 委 tvf full 禾:t 女:v F|横|上下 tv 烂 oufg partial 火:o 丷:u G|横|左右 -桃 siqn partial 木:s N|折|左右 +桃 siqn full 木:s 儿:i 儿:q N|折|左右 索 fpxi full 十:f 冖:p ㄠ:x 小:i 劈 nkuv full 尸:n 口:k 立:u 刀:v 钩 qqcy full 钅:q 勹:q 厶:c Y|捺|左右 @@ -1719,7 +1719,7 @@ 绮 xdsk full 纟:x 大:d 丁:s 口:k 刮 tdjh full 丿:t 古:d 刂:j H|竖|左右 汪 igg full 氵:i 王:g G|横|左右 ig -泰 dwiu partial 三:d 人:w U|捺|上下 +泰 dwiu full 三:d 人:w 氺:i U|捺|上下 钦 qqwy full 钅:q ⺈:q 人:w Y|捺|左右 趋 fhqv full 土:f 龰:h ⺈:q 彐:v 淑 ihic full 氵:i 上:h 小:i 又:c @@ -1788,7 +1788,7 @@ 汇 ian full 氵:i 匚:a N|折|左右 姆 vxgu partial 女:v 母:x U|捺|上下 vx 什 wfh full 亻:w 十:f H|竖|左右 -兆 iqv partial V|折|杂合 +兆 iqv full 儿:i 儿:q V|折|杂合 菌 altu full 艹:a 囗:l 禾:t U|捺|上下 筒 tmgk full ⺮:t 冂:m 一:g 口:k 嗤 kbhj full 口:k 凵:b 丨:h 虫:j @@ -1860,7 +1860,7 @@ 傗 wyxl full 亻:w 亠:y 幺:x 田:l 闸 ulk full 门:u 甲:l K|竖|杂合 浪 iyve full 氵:i 丶:y 彐:v E|撇|杂合 -漆 iswi partial 氵:i 木:s 人:w +漆 iswi full 氵:i 木:s 人:w 氺:i 娟 vkeg full 女:v 口:k 月:e G|横|左右 肚 efg full 月:e 土:f G|横|左右 坟 fyy full 土:f 文:y Y|捺|左右 fy @@ -1928,7 +1928,7 @@ 苯 asgf full 艹:a 木:s 一:g F|横|上下 赌 mftj full 贝:m 土:f 丿:t 日:j 吼 kbnn full 口:k 孑:b 乚:n N|折|左右 -康 yvii partial 广:y 彐:v I|捺|杂合 +康 yvii full 广:y 彐:v 氺:i I|捺|杂合 褰 pfje partial 宀:p 井:f E|撇|杂合 鎶 qskk unknown 挣 rqvh full 扌:r ⺈:q 彐:v 亅:h @@ -1991,7 +1991,7 @@ 妾 uvf full 立:u 女:v F|横|上下 沾 ihkg full 氵:i 卜:h 口:k G|横|左右 泄 iann full 氵:i 廿:a 乚:n N|折|左右 -剥 vijh partial 彐:v H|竖|左右 +剥 vijh full 彐:v 氺:i 刂:j H|竖|左右 弓 xngn full 弓:x 损 rkmy full 扌:r 口:k 贝:m Y|捺|左右 嬪 vpgm full 女:v 宀:p 一:g 貝:m @@ -2120,7 +2120,7 @@ 霍 fwyf full 雨:f 亻:w 隹:y F|横|上下 撕 radr full 扌:r 艹:a 三:d 斤:r 虹 jag full 虫:j 工:a G|横|左右 ja -膝 eswi partial 月:e 木:s 人:w +膝 eswi full 月:e 木:s 人:w 氺:i 霳 fbtg unknown 佹 wqdb unknown 豫 cbqe partial マ:c E|撇|杂合 @@ -2185,7 +2185,7 @@ 蓉 apwk full 艹:a 宀:p 八:w 口:k 嗣 kmak full 口:k 冂:m 艹:a 口:k 丸 vyi full 九:v 丶:y I|捺|杂合 -搅 ripq partial 扌:r +搅 ripq partial 扌:r 丷:i 冖:p 芳 ayb full 艹:a 方:y B|折|上下 ay 镍 qths full 钅:q 丿:t 目:h 木:s 扛 rag full 扌:r 工:a G|横|左右 @@ -2376,7 +2376,7 @@ 畅 jhnr partial 日:j 丨:h R|撇|上下 贯 xfmu full 毌:x 十:f 贝:m U|捺|上下 嘻 kfkk full 口:k 士:f 口:k 口:k -暴 jawi partial 日:j 龷:a 八:w +暴 jawi full 日:j 龷:a 八:w 氺:i 森 sssu full 木:s 木:s 木:s U|捺|上下 颊 guwm partial 一:g 丷:u 捷 rgvh full 扌:r 一:g 彐:v H|竖|左右 @@ -2421,7 +2421,7 @@ 阅 uukq full 门:u 丷:u 口:k 儿:q 勭 ujfl unknown 彬 sset full 木:s 木:s 彡:e ノ:t -黎 tqti partial 禾:t 勹:q 丿:t +黎 tqti full 禾:t 勹:q 丿:t 氺:i 裕 puwk partial 衤:p 梯 suxt full 木:s 丷:u 弓:x 丿:t 葱 aqrn partial 艹:a 勹:q @@ -2578,7 +2578,7 @@ 澄 iwgu full 氵:i 癶:w 一:g 䒑:u 挎 rdfn full 扌:r 大:d 二:f ㄅ:n 癌 ukkm full 疒:u 口:k 口:k 山:m -隶 vii partial 彐:v I|捺|杂合 +隶 vii full 彐:v 氺:i I|捺|杂合 槦 syvh unknown 胁 elwy full 月:e 力:l 八:w Y|捺|左右 澹 iqdy full 氵:i ⺈:q 厂:d 言:y @@ -2629,7 +2629,7 @@ 钧 qqug full 钅:q 勹:q 冫:u G|横|左右 屈 nbmk full 尸:n 凵:b 山:m K|竖|杂合 昂 jqbj full 日:j 卯:q 卩:b J|竖|上下 -藤 aeui partial 艹:a 月:e 䒑:u +藤 aeui full 艹:a 月:e 䒑:u 氺:i 协 flwy full 十:f 力:l 八:w Y|捺|左右 fl 币 tmhk full 丿:t 冂:m 丨:h K|竖|杂合 晶 jjjf full 日:j 日:j 日:j F|横|上下 @@ -2742,7 +2742,7 @@ 閫 ulsi full 門:u 囗:l 木:s I|捺|杂合 聘 bmgn full 耳:b 由:m 一:g ㄅ:n 谭 ysjh full 讠:y 覀:s 早:j H|竖|左右 -逮 vipi partial 彐:v I|捺|杂合 +逮 vipi full 彐:v 氺:i 辶:p I|捺|杂合 靖 ugeg full 立:u 主:g 月:e G|横|左右 伍 wgg full 亻:w 五:g G|横|左右 甭 giej partial 丆:g J|竖|上下 @@ -2843,7 +2843,7 @@ 箍 trah full ⺮:t 扌:r 匚:a 丨:h 篆 txeu partial ⺮:t U|捺|上下 蚌 jdhh full 虫:j 三:d 丨:h H|竖|左右 -氯 rnvi partial 𠂉:r ⺄:n 彐:v +氯 rnvi full 𠂉:r ⺄:n 彐:v 氺:i 窦 pwfd full 宀:p 八:w 十:f 大:d 裤 puyl partial 衤:p 顷 xdmy full 匕:x 丆:d 贝:m Y|捺|左右 xd @@ -2903,7 +2903,7 @@ 蛟 juqy partial 虫:j 违 fnhp full 二:f 𠃌:n 丨:h 辶:p 凛 uyli full 冫:u 亠:y 囗:l 小:i -敛 wgit partial 人:w 一:g +敛 wgit full 人:w 一:g 丷:i 夂:t 储 wyfj full 亻:w 讠:y 土:f 日:j 寡 pdev full 宀:p 丆:d 月:e 刀:v 绛 xtah full 纟:x 夂:t 七:a 丨:h @@ -2913,7 +2913,7 @@ 蹿 khph full 口:k 止:h 宀:p 丨:h 唔 kgkg full 口:k 五:g 口:k G|横|左右 啄 keyy partial 口:k -姚 viqn partial 女:v N|折|左右 +姚 viqn full 女:v 儿:i 儿:q N|折|左右 泻 ipgg full 氵:i 冖:p 一:g 一:g 俸 wdwh full 亻:w 三:d 人:w H|竖|左右 熺 ofkk full 火:o 士:f 口:k 口:k diff --git a/data/learning/wubi86-root-inventory.tsv b/data/learning/wubi86-root-inventory.tsv index b681934b..7924cd0e 100644 --- a/data/learning/wubi86-root-inventory.tsv +++ b/data/learning/wubi86-root-inventory.tsv @@ -87,10 +87,13 @@ 龰 h standard 𠂇 h standard ⺌ i D14 +丷 i variant +儿 i variant 小 i key-roots 少 i standard 水 i D14 氵 i key-roots +氺 i variant 〢 j standard 刂 j key-roots 日 j D14 diff --git a/data/sources.toml b/data/sources.toml index 646557c0..9ad7d8f8 100644 --- a/data/sources.toml +++ b/data/sources.toml @@ -442,9 +442,9 @@ id = "wubi-root-inventory" path = "data/learning/wubi86-root-inventory.tsv" source_ids = ["D1", "D2", "D14"] license = "CC-BY-SA-4.0" -sha256 = "c279d9944ce9f5cf6e5b49e47132adffa88b79a65706c29e0d3f892755dbb345" +sha256 = "e13254aa3b0e4c2829edf103b3acdaeb207a175f0cc33e30531ba6091e551074" generator = "manual/standard v1(ADR-358/报告 284)" -notes = "五笔86 统一拆字标准 v1 的标准字根清单:237 条 root/key(官方字根 + 标准变体);full 必须逐组件键位匹配;98/新世纪需各自 profile,不能直接套用" +notes = "五笔86 统一拆字标准 v1 的标准字根清单:240 条 root/key(官方字根 + 标准变体);full 必须逐组件键位匹配;98/新世纪需各自 profile,不能直接套用" [[derived]] id = "pua-inventory" @@ -460,9 +460,9 @@ id = "b0-runtime" path = "data/generated/B0-runtime.tsv" source_ids = ["D1", "D2", "D5", "D10", "D17", "D17-bis", "D18", "D19", "D24"] license = "CC-BY-SA-4.0" -sha256 = "ee1f60ffed14e8fa0f60a6425ca2134c5488ffcdd82286a1f7375c6dabc30c0d" +sha256 = "b41e61a9f6fbbd3a665c73e9155c1264623d2dc4564572d35c23267e04ab7659" generator = "modules/hanzi-structure/tools/build_b0.py --limit 3000 --runtime-out --pua-supplementary --manual-decomp" -notes = "ADR-311 v2 学习区运行时资源:字\t全码\t质量\t字根(形:键)\t识别码(字母|末笔|结构)\t简码(一/二);3,000 字约 116.6 KB(40 B/字,预算 512 KiB);full 2,554 / partial 292 / unknown 154;无 PUA;只读提示,不改候选顺序;N1-d 补充区映射(ADR-353)+ N4 补全(ADR-355)+ cjk-decomp 覆盖(ADR-357)" +notes = "ADR-311 v2 学习区运行时资源:字\t全码\t质量\t字根(形:键)\t识别码(字母|末笔|结构)\t简码(一/二);3,000 字约 116.6 KB(40 B/字,预算 512 KiB);full 2,578 / partial 268 / unknown 154;无 PUA;只读提示,不改候选顺序;N1-d 补充区映射(ADR-353)+ N4 补全(ADR-355)+ cjk-decomp 覆盖(ADR-357)" # 键位字根分布(modules/keymap):从 b0-runtime 派生,供练习/学习界面画键位图 [[derived]] diff --git a/docs/reviews/284-unified-decomposition-standard.md b/docs/reviews/284-unified-decomposition-standard.md index f5659d55..7823e13f 100644 --- a/docs/reviews/284-unified-decomposition-standard.md +++ b/docs/reviews/284-unified-decomposition-standard.md @@ -14,7 +14,7 @@ 落地产物: -- `data/learning/wubi86-root-inventory.tsv`:237 条 root/key(官方字根 + 标准变体); +- `data/learning/wubi86-root-inventory.tsv`:240 条 root/key(官方字根 + 标准变体); - `build_b0.py --root-inventory`; - B0 schema **v7**:`scheme` / `standardVersion`;`positionMismatch` 成为标准诊断,`full` 必须为空; - `validate_b0.py` 强制上述契约。 @@ -23,14 +23,14 @@ | 指标 | 标准前 | 标准后 | |---|---:|---:| -| B0 1,000 字 `full` | 965 | **910** | -| B0 1,000 字 `partial` | 31 | **86** | +| B0 1,000 字 `full` | 965 | **916** | +| B0 1,000 字 `partial` | 31 | **80** | | B0 1,000 字 `unknown` | 4 | 4 | -| B0 3,000 字 `full` | 2,759 | **2,554** | -| B0 3,000 字 `partial` | 87 | **292** | +| B0 3,000 字 `full` | 2,759 | **2,578** | +| B0 3,000 字 `partial` | 87 | **268** | | B0 3,000 字 `unknown` | 154 | 154 | -| 运行时 `full` | 2,602 | **2,554** | -| `standardMismatchEntries` | — | 267(3,000)/ 81(1,000) | +| 运行时 `full` | 2,602 | **2,578** | +| `standardMismatchEntries` | — | 240(3,000)/ 73(1,000) | 减少的 `full` 不是数据丢失,而是把「D2 组件不在标准字根清单、末位识别码槽/键位不能自洽」的条目 如实降为 `partial`;它们不再以完整解释展示。 diff --git a/docs/standards/wubi-decomposition.md b/docs/standards/wubi-decomposition.md index ce7d7566..5e79cfe4 100644 --- a/docs/standards/wubi-decomposition.md +++ b/docs/standards/wubi-decomposition.md @@ -48,11 +48,11 @@ modules/hanzi-structure/schemes/ **通用部分**:校验逻辑、`standardVersion`、B0 schema、N2/N3 结构层、IDS/CDP 结构参考、测试与报告流程。 **不通用部分**:86/98/新世纪的字根表、键位、码表、识别码规则和拆字数据必须各自提供;不能把 86 的拆字表直接套到 98/新世纪。 -因此:**逻辑通用,数据不通用**。98/新世纪可以在同一标准下接入,但需要各自的许可数据与方案 profile;结构/笔数/IDS/CDP 层可共享。 +因此:**逻辑通用,数据不通用**。98/新世纪预留同一标准接入点,**当前不实现**;需要各自的许可数据与方案 profile,结构/笔数/IDS/CDP 层可共享。 ## 4. 当前 86 profile 的落地 -- 字根清单:`data/learning/wubi86-root-inventory.tsv`(237 条 root/key,含标准变体); +- 字根清单:`data/learning/wubi86-root-inventory.tsv`(240 条 root/key,含标准变体); - 拆字来源:D2(MIT)、D24 cjk-decomp(Apache-2.0,树切分+键位/结构校验); - 结构:识别码 > CDP/IDS;CDP 通过 `檢字表.連接符號` 提供 1/2/3 结构; - 笔数:D18 真实笔顺(56 成字字根)+ CDP/Unihan 笔数校验; @@ -60,6 +60,6 @@ modules/hanzi-structure/schemes/ ## 5. 结果与边界 -标准 v1 落地后,B0 3,000 字 `full` 2,554 / `partial` 292 / `unknown` 154;1,000 字 `full` 910 / `partial` 86 / `unknown` 4。相比未加标准的 2,759,减少的条目主要是 D2 组件不在标准字根清单、或末位识别码槽/键位不能自洽的条目;它们被如实降为 `partial`,不再“看起来 full”。 +标准 v1 落地后,B0 3,000 字 `full` 2,578 / `partial` 268 / `unknown` 154;1,000 字 `full` 916 / `partial` 80 / `unknown` 4。相比未加标准的 2,759,减少的条目主要是 D2 组件不在标准字根清单、或末位识别码槽/键位不能自洽的条目;它们被如实降为 `partial`,不再“看起来 full”。 全量 27,823 的 canonical 五笔拆字仍受外部数据限制:CDP/cjk-decomp/IDS 是结构部件,不是五笔码位拆字;D3/inputx 不能用/不采用。标准的作用是**保证已判 full 的每条都可审计**,而不是承诺 100% 覆盖。 diff --git "a/docs/\345\206\263\347\255\226\350\256\260\345\275\225.md" "b/docs/\345\206\263\347\255\226\350\256\260\345\275\225.md" index 7e83404c..e47db01d 100644 --- "a/docs/\345\206\263\347\255\226\350\256\260\345\275\225.md" +++ "b/docs/\345\206\263\347\255\226\350\256\260\345\275\225.md" @@ -3929,7 +3929,7 @@ 键位/结构全匹配时采纳;CDP(GPL-3)只补结构/笔数;D3 仅构建期 oracle,不进产物。 4. B0 schema 升 **v7**:新增 `scheme` / `standardVersion`;`positionMismatch` 改为标准字根/键位 诊断,`full` 条目必须为空;report 新增 `scheme` / `standardVersion` / `standardMismatchEntries`。 - 5. 首个落地 86 profile:`data/learning/wubi86-root-inventory.tsv`(236 条 root/key,含标准变体)。 + 5. 首个落地 86 profile:`data/learning/wubi86-root-inventory.tsv`(240 条 root/key,含标准变体)。 - **结果**:B0 3,000 字 `full` 2,759→2,554、`partial` 87→292、`unknown` 154;1,000 字 `full` 965→910、 `partial` 31→86、`unknown` 4。减少的 `full` 主要是 D2 组件不在标准字根清单或键位/识别码不能自洽的条目, 被如实降级;不再用“看起来完整”的条目充数。 diff --git "a/docs/\345\276\205\345\212\236\344\270\216\347\247\257\345\216\213.md" "b/docs/\345\276\205\345\212\236\344\270\216\347\247\257\345\216\213.md" index 0fcaf27e..d0c78f3c 100644 --- "a/docs/\345\276\205\345\212\236\344\270\216\347\247\257\345\216\213.md" +++ "b/docs/\345\276\205\345\212\236\344\270\216\347\247\257\345\216\213.md" @@ -26,7 +26,7 @@ 状态 `verified 58 / partial 8 / unresolved 13`。B0 1,000 字 `full` 735→919,运行时 3,000 字 `full` 1,904→2,454; D3 不再作 `componentsSource`;未解决项仍以 `?:键` 占位,不猜。 - **N2/N3/N4 已完成**(ADR-355,报告 281):56 个成字字根真实笔顺、结构覆盖 2,766/3,000、8 个 D2 漏拆补齐;B0 schema v6。 - 运行时 `full` 2,554(85.1%);B0 `full` 2,554(85.1%),仍未达第二阶段 ≥98% 覆盖门槛。 + 运行时 `full` 2,578(85.9%);B0 `full` 2,578(85.9%),仍未达第二阶段 ≥98% 覆盖门槛。 ## 2. 待办 @@ -51,7 +51,7 @@ | P1-3 | **字根字形身份库(N1)**:N1-d 已解掉可定位的 D2 补充区 PUA;剩余 13 个未解决项与字形绘制 | ADR-353:N1-d 核验表已接入(报告 280);剩余 13 个(如 U+F005A 氏/卯、U+F001B 才/亅、U+F0145 乚/匕)保持占位。后续才需要 Academia Sinica / 自绘;不再需要全量自绘 251 个 | M–L | N1-d ✅ | 数据入库 | | P1-4 | ~~真笔顺(N2)/ 结构标注(N3)/ 完整拆字(N4)~~ ✅ 2026-11-14(ADR-355/356,报告 281/282) | D18 56 个成字字根真实笔顺;结构覆盖 2,766/3,000(识别码优先/IDS 参考,146 条冲突记录);8 个 D2 漏拆字补成 full。标准 v1 后 B0 full 2,554(85.1%)、运行时 2,554(85.1%);剩余 154 unknown;D24 cjk-decomp(Apache-2.0)已接入,未用 D3 作来源 | M–L | P1-3 ✅ | 数据入库 | | P1-5 | **拆字说明扩充** | B0 已有 2,759 条 `full` 结构化解释(运行时 2,602);D14 旧表仍是 104 条,尚未同步/扩写 | L | P1-4 ✅ | 数据入库 | -| P1-6 | **多方案支持**(五笔 98 / 郑码 / 仓颉) | `modules/keymap` 已按方案数据化(ADR-315),缺码表来源与许可(TBD-2) | M(含数据) | 合格来源 | 数据入库 | +| P1-6 | **多方案支持**(五笔 98 / 郑码 / 仓颉) | **当前不实现**:先把 86 做透;标准 v1 已留 `schemes/*.toml` profile 扩展点,98/新世纪需各自字根/码表许可数据 | M(含数据) | 用户暂缓 | 暂缓 | | P1-7 | ~~客户端自动回读缺口~~ ✅ 2026-11-14 关闭 | 用户决定收敛外部依赖:Safari/Chrome/Xcode 自动化、探针、fixture 与客户端矩阵已移除;验收只保留系统自带 TextEdit(质量样本)与自建 imetype 窗口 | — | — | 已闭环 | ### P1-U · 输入体验与学练闭环(ADR-324,已采纳;2026-11-12 差距分析) diff --git a/modules/hanzi-structure/corpus/B0-report.json b/modules/hanzi-structure/corpus/B0-report.json index f37ef6cb..cbc30e9a 100644 --- a/modules/hanzi-structure/corpus/B0-report.json +++ b/modules/hanzi-structure/corpus/B0-report.json @@ -4,10 +4,10 @@ "allCodes": false, "scheme": "wubi86", "standardVersion": "wubi86-1.0", - "standardMismatchEntries": 81, + "standardMismatchEntries": 73, "quality": { - "full": 910, - "partial": 86, + "full": 916, + "partial": 80, "unknown": 4 }, "classes": { @@ -37,7 +37,7 @@ "manualDecomp": 50, "withIds": 990, "idsFilled": 1, - "positionMismatchEntries": 81, + "positionMismatchEntries": 73, "inputs": { "codes": { "path": "../../data/generated/wubi86-single.tsv", @@ -93,7 +93,7 @@ }, "root_inventory": { "path": "../../data/learning/wubi86-root-inventory.tsv", - "sha256": "c279d9944ce9f5cf6e5b49e47132adffa88b79a65706c29e0d3f892755dbb345" + "sha256": "e13254aa3b0e4c2829edf103b3acdaeb207a175f0cc33e30531ba6091e551074" } }, "generator": "modules/hanzi-structure/tools/build_b0.py", diff --git a/modules/hanzi-structure/corpus/B0.json b/modules/hanzi-structure/corpus/B0.json index 7b846571..f7d66352 100644 --- a/modules/hanzi-structure/corpus/B0.json +++ b/modules/hanzi-structure/corpus/B0.json @@ -6102,7 +6102,6 @@ "ids": "⿸广⿱𭕄一", "idsStructure": "杂合", "positionMismatch": [ - 2, 3 ], "recognition": null, @@ -6113,7 +6112,7 @@ "quality": "partial", "notes": [ "拆字序列长于全码,已按码位截断(多出 1 个字形丢弃)", - "标准字根/键位不符:第 2 个(丷,键 i)、第 3 个(一,键 d)", + "标准字根/键位不符:第 3 个(一,键 d)", "字根已够四码,无识别码" ] }, @@ -8613,9 +8612,7 @@ "structureConflict": false, "ids": "⿱𰃮子", "idsStructure": "上下", - "positionMismatch": [ - 1 - ], + "positionMismatch": [], "recognition": { "key": "f", "stroke": "横", @@ -8626,10 +8623,8 @@ "short2": "ip", "pinyin": "xue", "frequency": 17482, - "quality": "partial", - "notes": [ - "标准字根/键位不符:第 1 个(丷,键 i)" - ] + "quality": "full", + "notes": [] }, { "char": "强", @@ -11328,17 +11323,14 @@ "structureConflict": false, "ids": "⿰佥刂", "idsStructure": "左右", - "positionMismatch": [ - 3 - ], + "positionMismatch": [], "recognition": null, "short1": null, "short2": null, "pinyin": "jian", "frequency": 12553, - "quality": "partial", + "quality": "full", "notes": [ - "标准字根/键位不符:第 3 个(丷,键 i)", "字根已够四码,无识别码" ] }, @@ -16153,9 +16145,7 @@ "structureConflict": false, "ids": "⿰𧾷兆", "idsStructure": "左右", - "positionMismatch": [ - 3 - ], + "positionMismatch": [], "recognition": null, "short1": null, "short2": null, @@ -16163,7 +16153,6 @@ "frequency": 8462, "quality": "partial", "notes": [ - "标准字根/键位不符:第 3 个(儿,键 i)", "字根数 3 与码长 4 对不上,无法判定识别码" ] }, @@ -19779,9 +19768,7 @@ "structureConflict": false, "ids": "⿱𰃮见", "idsStructure": "上下", - "positionMismatch": [ - 1 - ], + "positionMismatch": [], "recognition": null, "short1": null, "short2": null, @@ -19789,7 +19776,6 @@ "frequency": 6705, "quality": "partial", "notes": [ - "标准字根/键位不符:第 1 个(丷,键 i)", "字根数 3 与码长 4 对不上,无法判定识别码" ] }, @@ -20470,9 +20456,7 @@ "structureConflict": true, "ids": "⿱兴𰀁", "idsStructure": "上下", - "positionMismatch": [ - 1 - ], + "positionMismatch": [], "recognition": { "key": "h", "stroke": "竖", @@ -20483,10 +20467,8 @@ "short2": null, "pinyin": "ju", "frequency": 6506, - "quality": "partial", - "notes": [ - "标准字根/键位不符:第 1 个(丷,键 i)" - ] + "quality": "full", + "notes": [] }, { "char": "殿", @@ -20708,8 +20690,7 @@ "ids": "⿺⿻𬺰⿰冫⿱丿丶丶", "idsStructure": "杂合", "positionMismatch": [ - 1, - 2 + 1 ], "recognition": { "key": "i", @@ -20723,7 +20704,7 @@ "frequency": 6465, "quality": "partial", "notes": [ - "标准字根/键位不符:第 1 个(一,键 f)、第 2 个(氺,键 i)" + "标准字根/键位不符:第 1 个(一,键 f)" ] }, { @@ -21328,8 +21309,7 @@ "ids": "⿰求攵", "idsStructure": "左右", "positionMismatch": [ - 1, - 2 + 1 ], "recognition": null, "short1": null, @@ -21338,7 +21318,7 @@ "frequency": 6268, "quality": "partial", "notes": [ - "标准字根/键位不符:第 1 个(一,键 f)、第 2 个(氺,键 i)", + "标准字根/键位不符:第 1 个(一,键 f)", "字根已够四码,无识别码" ] }, @@ -23547,8 +23527,7 @@ "ids": "⿰王求", "idsStructure": "左右", "positionMismatch": [ - 2, - 3 + 2 ], "recognition": null, "short1": null, @@ -23557,7 +23536,7 @@ "frequency": 5650, "quality": "partial", "notes": [ - "标准字根/键位不符:第 2 个(一,键 f)、第 3 个(氺,键 i)", + "标准字根/键位不符:第 2 个(一,键 f)", "字根已够四码,无识别码" ] }, @@ -26773,9 +26752,7 @@ "structureConflict": false, "ids": "⿺辶兆", "idsStructure": "杂合", - "positionMismatch": [ - 1 - ], + "positionMismatch": [], "recognition": { "key": "v", "stroke": "折", @@ -26786,10 +26763,8 @@ "short2": null, "pinyin": "tao", "frequency": 4781, - "quality": "partial", - "notes": [ - "标准字根/键位不符:第 1 个(儿,键 i)" - ] + "quality": "full", + "notes": [] }, { "char": "唐", @@ -29482,7 +29457,6 @@ "ids": "⿱𭕄𬺢", "idsStructure": "上下", "positionMismatch": [ - 1, 2, 3 ], @@ -29494,7 +29468,7 @@ "quality": "partial", "notes": [ "拆字序列长于全码,已按码位截断(多出 1 个字形丢弃)", - "标准字根/键位不符:第 1 个(丷,键 i)、第 2 个(一,键 w)、第 3 个(八,键 u)", + "标准字根/键位不符:第 2 个(一,键 w)、第 3 个(八,键 u)", "字根已够四码,无识别码" ] }, @@ -33481,9 +33455,7 @@ "structureConflict": false, "ids": "⿰纟录", "idsStructure": "左右", - "positionMismatch": [ - 3 - ], + "positionMismatch": [], "recognition": { "key": "y", "stroke": "捺", @@ -33494,10 +33466,8 @@ "short2": "xv", "pinyin": "lv", "frequency": 3701, - "quality": "partial", - "notes": [ - "标准字根/键位不符:第 3 个(氺,键 i)" - ] + "quality": "full", + "notes": [] }, { "char": "痛", @@ -37726,9 +37696,7 @@ "structureConflict": false, "ids": "⿰木隶", "idsStructure": "左右", - "positionMismatch": [ - 3 - ], + "positionMismatch": [], "recognition": { "key": "y", "stroke": "捺", @@ -37739,10 +37707,8 @@ "short2": null, "pinyin": "di", "frequency": 3115, - "quality": "partial", - "notes": [ - "标准字根/键位不符:第 3 个(氺,键 i)" - ] + "quality": "full", + "notes": [] }, { "char": "哼", diff --git a/modules/hanzi-structure/provenance/B0.md b/modules/hanzi-structure/provenance/B0.md index 4438c2b7..376b190c 100644 --- a/modules/hanzi-structure/provenance/B0.md +++ b/modules/hanzi-structure/provenance/B0.md @@ -16,7 +16,7 @@ | 补充区 PUA 字根 | N1-d | 项目核验:D2 位序 + 标准五笔86 字根表 + OFL 参考字形 | CC-BY-SA-4.0 | `corpus/pua-supplementary.tsv` | `6d01786ad42e2573…` | | D2 BMP / 逐字语境 PUA | N1-d 扩展 | 项目核验:D2 位序 + 码位 + 标准字根 | CC-BY-SA-4.0 | `corpus/pua-d2-bmp.tsv`、`corpus/pua-context.tsv` | `4457e7e9c0eaaa42…` / `3419271ee78bb607…` | | 完整拆字(覆盖扩量) | D24 | amake/cjk-decomp(Apache-2.0;仅构建期读取) | Apache-2.0 / 编排 CC-BY-SA-4.0 | `data/learning/wubi86-cjkdecomp-coverage.tsv` | `22c439581feb938b…` | -| 标准字根清单 | D1/D2/D14 | 项目标准 v1(ADR-358) | CC-BY-SA-4.0 | `data/learning/wubi86-root-inventory.tsv` | `c279d9944ce9f5cf…` | +| 标准字根清单 | D1/D2/D14 | 项目标准 v1(ADR-358) | CC-BY-SA-4.0 | `data/learning/wubi86-root-inventory.tsv` | `e13254aa3b0e4c28…` | | 成字字根真实笔顺 / 完整拆字 | D18 | 项目自编(Unihan kTotalStrokes 校验笔数) | CC-BY-SA-4.0 | `data/learning/wubi86-root-strokes.tsv`、`wubi86-complete-decomp.tsv` | `7b0892dbb4934871…` / `391052b5602479b5…` | 完整 SHA-256(生成时记录): @@ -61,7 +61,7 @@ }, "root_inventory": { "path": "../../data/learning/wubi86-root-inventory.tsv", - "sha256": "c279d9944ce9f5cf6e5b49e47132adffa88b79a65706c29e0d3f892755dbb345" + "sha256": "e13254aa3b0e4c2829edf103b3acdaeb207a175f0cc33e30531ba6091e551074" }, "root_strokes": { "path": "../../data/learning/wubi86-root-strokes.tsv", @@ -94,8 +94,8 @@ { "schemaVersion": 7, "quality": { - "full": 910, - "partial": 86, + "full": 916, + "partial": 80, "unknown": 4 }, "classes": { @@ -123,9 +123,9 @@ ``` **运行时资源(3,000 字,`data/generated/B0-runtime.tsv`,ADR-311 v2)**: -`full` 2,554 / `partial` 292 / `unknown` 154;120,257 字节(≈40 B/字,预算 512 KiB); +`full` 2,578 / `partial` 268 / `unknown` 154;120,460 字节(≈40 B/字,预算 512 KiB); `componentsSource` 仅 D2(2,675)/D18(64)/D24(83);无 PUA。N3 结构覆盖 2,832 条(冲突 157);占位 57 条; -`standardMismatchEntries` 268。标准 v1 下 1,000 字 `full` 910 / `partial` 86 / `unknown` 4。 +`standardMismatchEntries` 268。标准 v1 下 1,000 字 `full` 916 / `partial` 80 / `unknown` 4。 ## 4. 复现 diff --git a/modules/keymap/data/key-roots-wubi86-audit.md b/modules/keymap/data/key-roots-wubi86-audit.md index cb8ca72c..54853b7e 100644 --- a/modules/keymap/data/key-roots-wubi86-audit.md +++ b/modules/keymap/data/key-roots-wubi86-audit.md @@ -11,7 +11,7 @@ | T | 31 | ノ×57、𠂉×56 | — | | Y | 41 | 隹×21 | — | | U | 42 | 䒑×75、冫×24、門×6 | — | -| I | 43 | 少×3 | — | +| I | 43 | 氺×15、丷×9、儿×6、少×3 | — | | O | 44 | 亦×12 | — | | P | 45 | — | — | | A | 15 | 龷×35、廿×20 | 卄 | @@ -29,6 +29,6 @@ | V | 53 | — | — | | B | 52 | ⺋×20 | — | | N | 51 | 乛×26、𠃌×26、ㄅ×25、コ×17、⺄×10、ユ×8、ㄥ×8、户×3 | 已 | -| M | 25 | ㄇ×25、貝×4、骨×2、巾×1 | — | +| M | 25 | ㄇ×26、貝×4、骨×2、巾×1 | — | 说明:语料里的拆分是「实际拆字结果」,包含复合部件与变形写法,不都是字根;本表以标准字根表为展示真源,语料差异仅作回归线索,不改展示内容。