2
0

known_issues.json 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. {
  2. "version": 1,
  3. "purpose": "related_paragraphs 重建工程的已知错误登记表:每条一个可机检的探测器,带旧表实测基线与各阶段目标。check.php 按此表给任意一张 related 表打分,用来回答『这一轮错误是不是变少了』。",
  4. "doc_ref": "api-v13/documents/related-paragraphs-redesign.md",
  5. "baseline_table": "related_paragraphs_bak_20260909",
  6. "baseline_database": "visuddhinanda_20260311",
  7. "baseline_measured_at": "2026-09-09",
  8. "params": {
  9. "cs_garbage_threshold": 5000,
  10. "cs_observed_max_legit": 3183,
  11. "flat_min_rows": 200,
  12. "flat_max_distinct_ratio": 50
  13. },
  14. "notes": [
  15. "cs6_para.csv 并未丢失(github.com/iapt-platform/clove/pali_title/cs6_para.csv,523283 行),与设计文档 §6.1 的表述不符。它是现表的来源,含全部历史错误,因此不作生成源,只作 baseline 与 book 129 的回填源。",
  16. "逐本比对 csv 非零行 vs wbw 标记数:只有 book 129 是『csv 有 6580 非零行、wbw 零标记』。E9 其余 15 本 csv 里也是全零,源头就没有。",
  17. "基线数字取自旧表实测,与文档 §4.3/§8 的差异已在各条 baseline_note 注明。",
  18. "E8 判据在实测中收窄,详见该条 baseline_note;旧的「cs 值种类少」判法会把章回绕误报成污染。",
  19. "MarkerParser 全库实跑:330267 个锚点 100% 归类,零 unknown。新发现两类文档未记录的形态——倒序区间 3 行(para504-407 / para706-608,高位笔误,按低位补齐还原为 504-507 / 706-708,已由前后邻标记验证)与多级章标记 247 行(an5_1_1 型,13 本,义注书 100-102 与 mūla 书 82-92 共用同一套编号,是跨文件章界对齐的抓手)。",
  20. "para504-407 丢段的完整链路已查清:cs6_para.csv 原样写了 begin=504,end=407,旧 Laravel 命令的 for ($i=$begin; $i<=$end; $i++) 一圈没进——是导入环节静默吞掉的,不是生成环节。"
  21. ],
  22. "detectors": [
  23. {
  24. "id": "E1_cs_garbage",
  25. "title": "cs 乱码值",
  26. "doc_ref": "§4.3 E1",
  27. "severity": "blocker",
  28. "baseline": {
  29. "rows": 1242,
  30. "books": 24
  31. },
  32. "target_v1": {
  33. "rows": 0
  34. },
  35. "target_final": {
  36. "rows": 0
  37. },
  38. "root_cause": "旧生成器解析无后缀区间标记 para7-10 产生废值(如 44022)",
  39. "fix_stage": "batch1 导出器:超值域拒绝输出 + issue"
  40. },
  41. {
  42. "id": "E2_chapter_wrap",
  43. "title": "章回绕(cs 从 1 重新计数)",
  44. "doc_ref": "§4.3 E2",
  45. "severity": "blocker",
  46. "baseline": {
  47. "wrap_points": 395,
  48. "books": 64
  49. },
  50. "baseline_note": "原写 430、后按逐行判据实测 429,两者都偏高:区间标记展开后一个段落有多行(para1-2 展开成 cs=1、cs=2 两行),连续这样的段落逐行看就是 …2,1,2,1…,每段都像一次重置。book 137 的 sn5「5 次回绕」、book 108 的 kn12「95 次回绕」全是这么来的假象。改按段落级 cs_min 判后,旧表实测 395 处 / 64 本。",
  51. "target_v1": {
  52. "wrap_points": "unchanged"
  53. },
  54. "target_final": {
  55. "wrap_points": "<50"
  56. },
  57. "root_cause": "VRI 标记是章内局部编号,章界处重置,旧生成器照搬",
  58. "fix_stage": "batch3 章后缀;v1 不处理,先让确定性规则跑干净"
  59. },
  60. {
  61. "id": "E3_kn10_missing",
  62. "title": "kn10 家族命名错乱,apadāna 注释链断裂",
  63. "doc_ref": "§4.3 E3",
  64. "severity": "blocker",
  65. "baseline": {
  66. "kn10_rows": 0,
  67. "kn10_a_rows": 16787,
  68. "kn10_b_rows": 12407
  69. },
  70. "baseline_note": "kn10_A/kn10_B 行数取自 csv album 统计,旧表同源",
  71. "target_v1": {
  72. "kn10_rows": ">6000"
  73. },
  74. "target_final": {
  75. "kn10_rows": ">6000"
  76. },
  77. "root_cause": "therā/therī(book 143/144)被赋 kn10_A/kn10_B 且归属互相矛盾;wbw 中 paraN_kn10 标记 6533 行在 related 中映射丢失",
  78. "fix_stage": "batch1 书级配置表"
  79. },
  80. {
  81. "id": "E4_empty_book_name",
  82. "title": "空 book_name(无注释体系书)",
  83. "doc_ref": "§4.3 E4",
  84. "severity": "expected",
  85. "baseline": {
  86. "rows": 112965
  87. },
  88. "target_v1": {
  89. "rows": "~112965"
  90. },
  91. "target_final": {
  92. "rows": "~112965"
  93. },
  94. "root_cause": "nīti/语法/词典类书无 cs 标记体系,不参与注释关系",
  95. "fix_stage": "不修,维持现状(§6.7)"
  96. },
  97. {
  98. "id": "E5_book_id_zero",
  99. "title": "book_id 未赋值",
  100. "doc_ref": "§4.3 E5",
  101. "severity": "minor",
  102. "baseline": {
  103. "rows": 354,
  104. "books": 201
  105. },
  106. "target_v1": {
  107. "rows": "<=354"
  108. },
  109. "target_final": {
  110. "rows": "<=354"
  111. },
  112. "root_cause": "各文件 para 1-2 书前页,语义正确;另 sn 280/281 整段归错前册",
  113. "fix_stage": "batch1 book_id 层按 book_titles 重跑"
  114. },
  115. {
  116. "id": "E6_coverage_gap",
  117. "title": "覆盖缺口(wbw 有段落但 related 无行)",
  118. "doc_ref": "§4.3 E6",
  119. "severity": "major",
  120. "baseline": {
  121. "segments": 3466
  122. },
  123. "target_v1": {
  124. "segments": "<500"
  125. },
  126. "target_final": {
  127. "segments": "<100"
  128. },
  129. "root_cause": "主体为缩写区间丢失(E7),其余为 wbw_templates 整段缺失",
  130. "fix_stage": "batch1 + batch4"
  131. },
  132. {
  133. "id": "E7_abbrev_interval_lost",
  134. "title": "缩写区间丢失(para292-3 型)",
  135. "doc_ref": "§4.3 E7",
  136. "severity": "blocker",
  137. "baseline": {
  138. "marker_segments": 1517,
  139. "books": 44,
  140. "segments_without_rows": 1292,
  141. "segments_with_garbage": 225
  142. },
  143. "target_v1": {
  144. "segments_without_rows": 0,
  145. "segments_with_garbage": 0
  146. },
  147. "target_final": {
  148. "segments_without_rows": 0,
  149. "segments_with_garbage": 0
  150. },
  151. "root_cause": "VRI 缩写语法 para292-3(=292-293)旧生成器不识别:多数跳过,少数误解析为废值",
  152. "fix_stage": "batch1 导出器缩写补齐规则"
  153. },
  154. {
  155. "id": "E8_flat_pollution",
  156. "title": "书边界污染平铺",
  157. "doc_ref": "§4.3 E8",
  158. "severity": "blocker",
  159. "baseline": {
  160. "groups": 1,
  161. "rows": 1499
  162. },
  163. "baseline_note": "实测复核后收窄了判据:污染的准确签名是「整段零 cs 标记却被写进非零 cs」。按此判全库只有 book 207 / book_id 259 kaṅkhāvitaraṇī 一段(1499 行恒 cs=75)。文档 §4.3 原列的另外几组里,book 212/273(669 行)、book 180/213、book 209/261 都是 cs 恒 0,0 是「未赋值」不是编造值,不算污染;book 152/46/116/154/204 则是章回绕(E2)被误判——book 152 有 516 个标记却只 24 个 cs 值,正是 22 次回绕造成的。",
  164. "target_v1": {
  165. "groups": 0
  166. },
  167. "target_final": {
  168. "groups": 0
  169. },
  170. "root_cause": "换书(book_id 切换)后无标记,旧生成器无限沿用上一个 cs 值",
  171. "fix_stage": "batch1 留空 + batch4 LLM"
  172. },
  173. {
  174. "id": "E9_no_marker_books",
  175. "title": "全书无标记(related 有行但 wbw 零标记)",
  176. "doc_ref": "§4.3 E9",
  177. "severity": "major",
  178. "baseline": {
  179. "books": 16,
  180. "book_list": [
  181. 8,
  182. 15,
  183. 16,
  184. 25,
  185. 37,
  186. 39,
  187. 40,
  188. 41,
  189. 42,
  190. 44,
  191. 45,
  192. 47,
  193. 48,
  194. 56,
  195. 61,
  196. 129
  197. ]
  198. },
  199. "target_v1": {
  200. "books": 16,
  201. "note": "v1 只按 wbw 重放,这些书自然无行"
  202. },
  203. "target_final": {
  204. "books": 15,
  205. "note": "book 129 用 csv 回填(csv 有 6580 非零行),其余 15 本 csv 也是全零,源头没有"
  206. },
  207. "root_cause": "VRI 源文件无锚点",
  208. "fix_stage": "batch4:129 用 csv,其余维持现状",
  209. "baseline_note": ""
  210. },
  211. {
  212. "id": "E10_selfmade_names",
  213. "title": "自造名体系(NK / subo / dict)",
  214. "doc_ref": "§4.3 E10",
  215. "severity": "expected",
  216. "baseline": {
  217. "nk_rows": 985,
  218. "subo_rows": 4256,
  219. "dict_rows": 6646
  220. },
  221. "baseline_note": "行数为 csv album 口径的近似值,check.php 会实测回填",
  222. "target_v1": {
  223. "note": "保留不动,架构正确"
  224. },
  225. "target_final": {
  226. "note": "保留不动"
  227. },
  228. "root_cause": "非 SC 体系书对的自造 album 名,与 dn1/dn1_A 同构",
  229. "fix_stage": "不改名,仅修其中的乱码/缩写(§6.7)"
  230. },
  231. {
  232. "id": "D_continuity",
  233. "title": "同 (book, book_name, cs_para) 的 para 不连续",
  234. "doc_ref": "§4.2 正确性判据",
  235. "severity": "watch",
  236. "baseline": {
  237. "broken_groups": 9026,
  238. "books": 69,
  239. "extra_segments": 30204
  240. },
  241. "target_v1": {
  242. "broken_groups": "decrease"
  243. },
  244. "target_final": {
  245. "broken_groups": "decrease"
  246. },
  247. "root_cause": "部分为合法的回指补充(cs 小幅回退),部分为章回绕与污染导致的真错",
  248. "fix_stage": "观察项,不做硬断言;batch3 后应显著下降"
  249. },
  250. {
  251. "id": "D_mirror_alignment",
  252. "title": "镜像型书对两侧 max(cs_para) 一致",
  253. "doc_ref": "§4.2 / §8",
  254. "severity": "blocker",
  255. "baseline": {
  256. "aligned": {
  257. "dn1": 559,
  258. "kn6": 1289,
  259. "kn9": 524,
  260. "abhi5": 918
  261. },
  262. "misaligned": [
  263. "abhi3",
  264. "abhi4",
  265. "abhi6",
  266. "abhi7"
  267. ]
  268. },
  269. "target_v1": {
  270. "note": "aligned 四组必须保持相等;misaligned 四组 batch3 处理"
  271. },
  272. "target_final": {
  273. "note": "全部对齐"
  274. },
  275. "root_cause": "义注/复注段的标记即被注书段落号;abhidhamma 系自有编号导致跨侧错位",
  276. "fix_stage": "batch1 出口断言 + batch3 补丁后缀"
  277. },
  278. {
  279. "id": "D_interval_expansion",
  280. "title": "区间标记展开行数 == M − N + 1",
  281. "doc_ref": "§6.3 验收断言",
  282. "severity": "blocker",
  283. "baseline": {
  284. "note": "旧表未做此断言,check.php 首跑回填实测值"
  285. },
  286. "target_v1": {
  287. "mismatched_markers": 0
  288. },
  289. "target_final": {
  290. "mismatched_markers": 0
  291. },
  292. "root_cause": "旧生成器对 151-152 型一对多展开不完整",
  293. "fix_stage": "batch1"
  294. },
  295. {
  296. "id": "D_book_regression",
  297. "title": "基线合格书回归",
  298. "doc_ref": "§5 汇总",
  299. "severity": "blocker",
  300. "baseline": {
  301. "note": "首跑生成 baseline.json,冻结旧表中零错误信号的书"
  302. },
  303. "target_v1": {
  304. "regressed_books": 0
  305. },
  306. "target_final": {
  307. "regressed_books": 0
  308. },
  309. "root_cause": "重建可能破坏本来正确的书",
  310. "fix_stage": "每轮必检"
  311. },
  312. {
  313. "id": "D_pairing",
  314. "title": "配对质量(可信配对段数 / 膨胀键)",
  315. "doc_ref": "§3 查询逻辑 / §6.1 回绕处理",
  316. "severity": "blocker",
  317. "baseline": {
  318. "rows_paired_trusted": 177016,
  319. "keys_bloated": 6671,
  320. "keys_bloated_bad": 1413
  321. },
  322. "target_v1": {
  323. "rows_paired_trusted": ">=177016"
  324. },
  325. "target_final": {
  326. "rows_paired_trusted": "尽量大",
  327. "keys_bloated_bad": "尽量小"
  328. },
  329. "root_cause": "章回绕让同一个 (book_name, cs_para) 在几十个章里重复,index() 一次查询捞回上千段",
  330. "note": "可信配对 = key 跨文件命中、且在任何单本书里都不超过 10 段。直接数 rows_paired 会把回绕噪声算成资产——kn10 加后缀后 rows_paired 从 23757 掉到 6279 看着像灾难,其实掉的几乎全是 book 144章 43-56 的虚假配对(那几章本来就没有义注,是靠撞在一起的 kn10:1 假装配上的)。",
  331. "fix_stage": "batch3 章后缀 + batch4 补丁"
  332. }
  333. ],
  334. "rounds": [
  335. {
  336. "round": 1,
  337. "date": "2026-09-09",
  338. "table": "related_paragraphs_v1",
  339. "rows": 638076,
  340. "scripts": "build_markers.php → build_book_config.php → export.php → check.php → diff.php",
  341. "result": {
  342. "E1_cs_garbage": "1242 → 0",
  343. "E3_kn10_missing": "0 → 25506(kn10_A/kn10_B 清零)",
  344. "E6_coverage_gap": "3464 → 1(仅 book 11 para 1577 的截断标记)",
  345. "E7_abbrev_interval_lost": "1292 段无行 + 225 段废值 → 0 + 0",
  346. "E8_flat_pollution": "1499 行 → 0",
  347. "D_interval_expansion": "1611 个区间标记展开不符 → 0",
  348. "D_mirror_alignment": "四组镜像判据保持(dn1 559 / kn6 1289 / kn9 524 / abhi5 918)",
  349. "clean_books": "128 → 148",
  350. "E2_chapter_wrap": "429 → 677(未处理,留给章后缀批次;旧表的乱码与污染此前掩盖了部分真回绕)"
  351. },
  352. "diff_vs_old": {
  353. "same": "480290 段 / 91.8%",
  354. "only_in_old": "1 段(截断标记)",
  355. "only_in_new": "3466 段(区间展开补回,与旧表的覆盖缺口数一致)",
  356. "cs_changed": "10371 段 —— 8600 段新归零(防污染/防越界沿用)、528 段新赋值、1290 段两侧都非零而边界不同",
  357. "name_changed": "29156 段 —— 29146 段是 kn10 家族修复(books 143/144/107),其余 10 段是各文件 book_tag 所在段本身"
  358. },
  359. "open": [
  360. "book 129(6605 段)现为 cs=0 占位,待用 cs6_para.csv 回填(csv 有 6580 非零行)",
  361. "20 段 segment_without_markers 已输出 cs=0 占位,待 LLM 归属",
  362. "book 11 para 1577 的 para179- 截断标记待人工定",
  363. "E2 章回绕 677 处未处理",
  364. "1290 段两侧都非零而边界不同,需抽样复核(book 110 已查:旧表把 cs=5 边界提前 7 段,wbw 无依据,新值站得住)"
  365. ]
  366. },
  367. {
  368. "round": 2,
  369. "date": "2026-09-09",
  370. "table": "related_paragraphs_v2",
  371. "scripts": "align_chapters.php → apply_chapters.php",
  372. "approach": "跨侧章对齐:以 mūla 侧的 cs 重置段为章号定义,注释侧用带空位的序列比对(Needleman–Wunsch,打分基于两侧每章 max(cs) 的接近程度)对齐过去,两侧用同一套章号加后缀。每个 book_name 改名前后实测一次可信配对段数,掉了就整名回滚——指标把关,不是规则把关。",
  373. "result": {
  374. "E2_chapter_wrap": "399 → 116(旧表 395)",
  375. "D_pairing.rows_paired_trusted": "186744 → 232557(旧表 177016,+31%)",
  376. "D_pairing.keys_cross_book": "29005 → 34878",
  377. "D_pairing.keys_bloated_bad": "1259 → 958(旧表 1413)",
  378. "D_mirror_alignment": "0 偏离,保持",
  379. "clean_books": "156 → 189(旧表 130)",
  380. "applied": "17 个 book_name,改名 165779 行,无一回归"
  381. },
  382. "open": [
  383. "5 个名字加后缀后可信配对归零或下跌,已自动回滚:vin8、dict、abhi8、vin7(并列的两本书被当成顺序拼接)、abhi7(3429→2940)",
  384. "20 个名字跨侧对齐置信不足未处理:abhi2 abhi9 an11 an4 an5 an7 an9 kn2 kn3 kn6 kn7 mn1 mn1_A sn1 sn5 vin1 vin2 vin3 vin4 vin5——它们的共同特征是 mūla 侧 cs 单调无回绕、回绕只在注释侧,两侧用的不是同一套编号,序列比对无从下手",
  385. "剩余 116 处回绕分布在 27 本",
  386. "章标题不能当通用对齐信号:book 143(1. Buddhavaggo…)与 book 107(Dīpaṅkaro buddho…)标题完全对不上,文档 §6.4 的三层同名标题只适用于 vinaya 那组"
  387. ]
  388. }
  389. ]
  390. }