diff --git a/.claude/skills/parse-book/scripts/parse_ingest.py b/.claude/skills/parse-book/scripts/parse_ingest.py index 708dff6..53f0581 100644 --- a/.claude/skills/parse-book/scripts/parse_ingest.py +++ b/.claude/skills/parse-book/scripts/parse_ingest.py @@ -532,7 +532,9 @@ def _absorb(mother, loser, sim, why): """把输家并入母卡(内存态,写库延后到写段统一落):输家实例(带书名归属)追加进母卡实例数组 + 记「回溯归并审计」(相似度/判定依据/被归并卡全文——全文留痕保证归并可逆)。""" book = (loser.get("出处") or {}).get("书名") or "" - add = [dict(ins, 书=book) for ins in (loser.get("实例") or [])] # 跨书归属:每条实例标来源书 + # 跨书归属:优先保留实例原有的书名——输家可能是"此前已跨书吸并过的母卡",其实例里混有别书来源, + # 绝不能用输家自己的书名无条件覆写(那会把二级归并的真实来源抹成输家书名);无原书名的才补输家书名。 + add = [dict(ins, 书=ins.get("书") or book) for ins in (loser.get("实例") or [])] mother["实例"] = (mother.get("实例") or []) + add mother.setdefault("回溯归并审计", []).append( {"相似度": round(float(sim), 4), "判定依据": why, "被归并卡": loser}) diff --git a/.claude/skills/parse-book/scripts/parse_upgrade.py b/.claude/skills/parse-book/scripts/parse_upgrade.py index f420826..34e4dd8 100644 --- a/.claude/skills/parse-book/scripts/parse_upgrade.py +++ b/.claude/skills/parse-book/scripts/parse_upgrade.py @@ -322,7 +322,10 @@ def _entry_win(x): # 章级排序不用运行时窗号,而用真实章号(设计稿 §6.1「真实章号索引」的落点)。 # 内嵌真实章号抽取:正文/台阶里原样出现的「第X章 / X章 / Ch.X」——迁移与降级共用 -INLINE_CHAP_RE = re.compile(r"第\s*(\d+)\s*章|(?:Ch|CH|ch)\.?\s*(\d+)|(?