Add the missing --freeze CLI mode to the en pair module so the unfrozen-manifest error points at a command that exists

This commit is contained in:
heaven 2026-08-14 14:44:01 +03:00
parent aef64f33ce
commit 9785829755

View file

@ -159,7 +159,7 @@ def units(n_per_stratum: int | None = None, freeze: bool = False) -> list[dict]:
want = sets.get(str(n)) want = sets.get(str(n))
if want is None: if want is None:
raise SystemExit(f"⛔ набор n_per_stratum={n} не заморожен в {MANIFEST}: " 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} have = {u["uid"]: u for u in picked}
miss = [u for u in want if u not in have] miss = [u for u in want if u not in have]
if miss: if miss:
@ -488,9 +488,26 @@ def cmd_score() -> None:
f"{sum(r['ty_vy']['mixed_in_unit'] for r in rows):12d}") 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__": if __name__ == "__main__":
cmd = {"--units": cmd_units, "--arms": cmd_arms, "--judge": cmd_judge, 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: if cmd:
cmd() cmd()
else: else: