From 9785829755af7304687e2388a7231d90057f250d Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 14 Aug 2026 14:44:01 +0300 Subject: [PATCH] Add the missing --freeze CLI mode to the en pair module so the unfrozen-manifest error points at a command that exists --- eval/role_topology/pair_en.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/eval/role_topology/pair_en.py b/eval/role_topology/pair_en.py index 695e7fb6..82d53b94 100644 --- a/eval/role_topology/pair_en.py +++ b/eval/role_topology/pair_en.py @@ -159,7 +159,7 @@ def units(n_per_stratum: int | None = None, freeze: bool = False) -> list[dict]: want = sets.get(str(n)) if want is None: raise SystemExit(f"⛔ набор n_per_stratum={n} не заморожен в {MANIFEST}: " - f"прогнать pair_en.py --freeze {n} до покупок") + f"прогнать eval/role_topology/pair_en.py --freeze {n} до покупок") have = {u["uid"]: u for u in picked} miss = [u for u in want if u not in have] if miss: @@ -488,9 +488,26 @@ def cmd_score() -> None: f"{sum(r['ty_vy']['mixed_in_unit'] for r in rows):12d}") +def cmd_freeze() -> None: + """Заморозить набор единиц: `--freeze [n]`, по умолчанию n = N_PER_STRATUM. + + ⚠ Режим заведён 14.08 по ревью: сообщение о незамороженном наборе ссылалось на `--freeze`, + которого в диспетчере НЕ БЫЛО, — подсказка врала. На свежем клоне без манифеста в это + упирались `material.units_en`, `verify_report` и `blind_read`: все зовут `units()` без + аргумента и получают СТОП, а выхода из CLI не существовало. Заморозка — намеренно ОТДЕЛЬНЫЙ + режим: чтение никогда не пишет манифест, иначе прикол снова стал бы декоративным. + """ + n = int(sys.argv[2]) if len(sys.argv) > 2 and sys.argv[2].isdigit() else N_PER_STRATUM + us = units(n, freeze=True) + print(f"заморожено: n_per_stratum={n} → единиц {len(us)} → {MANIFEST}") + for u in us: + print(f" {u['uid']} страта {u['stratum']:6s} знаков {len(u['source']):5d}") + + if __name__ == "__main__": cmd = {"--units": cmd_units, "--arms": cmd_arms, "--judge": cmd_judge, - "--score": cmd_score}.get(sys.argv[1] if len(sys.argv) > 1 else "") + "--score": cmd_score, "--freeze": cmd_freeze}.get( + sys.argv[1] if len(sys.argv) > 1 else "") if cmd: cmd() else: