Land seed v2 signoff transform script: reproducible provenance for owner-signed glossary v2 term statuses (D34.1)
This commit is contained in:
parent
b49ce2b36a
commit
3c113d72ce
1 changed files with 90 additions and 0 deletions
90
eval/exp13_seed_signoff.py
Normal file
90
eval/exp13_seed_signoff.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env python3
|
||||
"""exp13 — применение ПОДПИСИ владельца к сиду v2 (D30.5/D32). Провенанс подписи.
|
||||
Владелец подписал спорные + переопределил часть approved-dst (2026-07-12). Спорные → approved.
|
||||
Вход/выход: guzhenren-seed-v2.yaml (in-place). Лог: diag/glossary_v2_signoff_applied.md. ВНЕ git.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
|
||||
BOOK = Path("/home/ubuntu/books/gu-zhenren")
|
||||
SEED = BOOK / "guzhenren-seed-v2.yaml"
|
||||
LOG = BOOK / "diag" / "glossary_v2_signoff_applied.md"
|
||||
|
||||
# src -> (new_dst, invariant, forms, note_tag)
|
||||
DECISIONS = {
|
||||
"花酒行者": ("Монах Цветочного Вина", False,
|
||||
["Монаха Цветочного Вина", "Монаху Цветочного Вина", "Монаха Цветочного Вина", "Монахом Цветочного Вина", "Монахе Цветочного Вина"],
|
||||
"подпись: НЕ «Странник Цветов и Вина»/«Винный Странник»; 行者=монах, 花酒=цветочное вино"),
|
||||
"蛊虫": ("гу-червь", False,
|
||||
["гу-червя", "гу-червю", "гу-червя", "гу-червём", "гу-черве"],
|
||||
"подпись: гу-червь (подтверждено)"),
|
||||
"本命蛊": ("гу Жизни", True, [],
|
||||
"подпись: «гу Жизни» (возврат к v1-форме; НЕ «жизненный гу»); инвариант как гу+генитив"),
|
||||
"修炼": ("культивация", False,
|
||||
["культивации", "культивации", "культивацию", "культивацией", "культивации"],
|
||||
"подпись: культивация (НЕ «совершенствование»)"),
|
||||
"修行": ("культивация", False,
|
||||
["культивации", "культивации", "культивацию", "культивацией", "культивации"],
|
||||
"подпись: согласовано с 修炼=культивация"),
|
||||
"人祖": ("Жэнь Цзу", True, [],
|
||||
"подпись: транслит «Жэнь Цзу» (НЕ «Первопредок», НЕ «Рен Зу»); -у → инвариант"),
|
||||
"古月山寨": ("деревня Гуюэ", False,
|
||||
["деревни Гуюэ", "деревне Гуюэ", "деревню Гуюэ", "деревней Гуюэ", "деревне Гуюэ"],
|
||||
"подпись: «деревня Гуюэ» (НЕ «селение»/«стан»)"),
|
||||
"白家寨": ("деревня Бай", False,
|
||||
["деревни Бай", "деревне Бай", "деревню Бай", "деревней Бай", "деревне Бай"],
|
||||
"консистентно-выровнено под 古月山寨→деревня (диклоуз владельцу)"),
|
||||
"熊家寨": ("деревня Сюн", False,
|
||||
["деревни Сюн", "деревне Сюн", "деревню Сюн", "деревней Сюн", "деревне Сюн"],
|
||||
"консистентно-выровнено под 古月山寨→деревня (диклоуз владельцу)"),
|
||||
"空窍": ("апертура", False,
|
||||
["апертуры", "апертуре", "апертуру", "апертурой", "апертуре"],
|
||||
"подпись: апертура (подтверждено)"),
|
||||
"元海": ("море истинной ци", False,
|
||||
["моря истинной ци", "морю истинной ци", "морем истинной ци", "море истинной ци"],
|
||||
"подпись: море истинной ци (подтверждено)"),
|
||||
"元石": ("первобытный камень", False,
|
||||
["первобытного камня", "первобытному камню", "первобытный камень", "первобытным камнем", "первобытном камне",
|
||||
"первобытные камни", "первобытных камней", "первобытным камням", "первобытными камнями", "первобытных камнях"],
|
||||
"подпись: «первобытные камни» → канон.ед. «первобытный камень» (НЕ «изначальный»/«первокамень»); +мн.ч. D24.4"),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
data = yaml.safe_load(SEED.read_text(encoding="utf-8"))
|
||||
applied, missing = [], []
|
||||
for t in data["terms"]:
|
||||
s = t.get("src")
|
||||
if s in DECISIONS:
|
||||
new_dst, inv, forms, tag = DECISIONS[s]
|
||||
old = t.get("dst")
|
||||
t["dst"] = new_dst
|
||||
t["decl"] = {"invariant": inv, "forms": list(forms)}
|
||||
t["status"] = "approved"
|
||||
t["note"] = f"[signoff:approved] {tag}. (было: «{old}»). " + (t.get("note") or "")
|
||||
applied.append((s, old, new_dst))
|
||||
seen = {t.get("src") for t in data["terms"]}
|
||||
missing = [s for s in DECISIONS if s not in seen]
|
||||
|
||||
SEED.write_text(yaml.dump(data, allow_unicode=True, sort_keys=False, width=200), encoding="utf-8")
|
||||
|
||||
lg = ["# Глоссарий v2 — ПОДПИСЬ владельца применена (D30.5/D32, 2026-07-12)", "",
|
||||
f"Применено решений: {len(applied)}. Все → status:approved. Провенанс: `eval/exp13_seed_signoff.py`.",
|
||||
"**Остаётся открытым (низкий приоритет, не блокирует resnapshot):** род бесплатного «гу» (蛊) — "
|
||||
"согласование «этот гу» (муж., как «гу-червь») vs «это гу» (сред.). Рекомендация: мужской. `蛊` инвариантен, "
|
||||
"single-char (не на горячем пути A3) → влияет только на прозу редактора, не на hard-constraint.", "",
|
||||
"| src | было | стало (approved) |", "|---|---|---|"]
|
||||
for s, old, new in applied:
|
||||
lg.append(f"| {s} | {old} | **{new}** |")
|
||||
if missing:
|
||||
lg += ["", "⚠ НЕ найдены в сиде (проверить): " + ", ".join(missing)]
|
||||
LOG.write_text("\n".join(lg), encoding="utf-8")
|
||||
|
||||
print(f"применено: {len(applied)}, ненайдено: {missing}")
|
||||
for s, old, new in applied:
|
||||
print(f" {s}: «{old}» → «{new}» [approved]")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Reference in a new issue