From 3df9f540072920a3fea6cf56bf0d55dd6a77c321 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 8 Aug 2026 15:15:49 +0300 Subject: [PATCH] Widen the polygon purchase guard from one package directory to the whole eval zone so a second pack can buy under its own freeze --- eval/role_topology/buy.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/eval/role_topology/buy.py b/eval/role_topology/buy.py index 5be85be0..7c60354f 100644 --- a/eval/role_topology/buy.py +++ b/eval/role_topology/buy.py @@ -87,6 +87,12 @@ def priced(model: str, us: dict) -> float: ZONE = Path(__file__).resolve().parent +# ⚠ Расширено эксп-22 (08.08): гард сравнивал каталог с `role_topology` и тем самым запрещал +# покупки ЛЮБОМУ другому паку полигона, хотя его смысл — «код в репозитории, а не временный +# скрипт». Зона полигона по CLAUDE.md — весь `eval/`, поэтому граница проведена здесь. +# Проверка «НЕ-файл» (встроенный питон из командной строки) — та, из-за которой гард заведён, — +# не тронута; эксп-22 поверх этого требует ещё и git-чистоты вызывающего файла (`tenant_panel/money.py`). +POLYGON = ZONE.parent def _refuse_unfrozen_caller() -> None: @@ -115,12 +121,12 @@ def _refuse_unfrozen_caller() -> None: raise SystemExit(f"⛔ покупка из НЕ-ФАЙЛА ({fr.filename}) запрещена: " "встроенный питон из командной строки не воспроизводим из репозитория") p = Path(fr.filename).resolve() - if p.parent == ZONE: # свой же модуль в цепочке — пропускаем - continue if p.suffix != ".py": raise SystemExit(f"⛔ покупка из НЕ-ФАЙЛА ({fr.filename}) запрещена") + if POLYGON in p.parents: # код полигона в цепочке — пропускаем + continue raise SystemExit(f"⛔ покупка из кода вне зоны полигона запрещена: {p}\n" - f" перенеси скрипт в {ZONE} и закоммить пре-рег-фризом") + f" перенеси скрипт в {POLYGON} и закоммить пре-рег-фризом") return