Restore the drift checks lost in the incident recovery and pin a linter for the polygon zone after a shadowed-name bug silently cost half the gate coverage

This commit is contained in:
heaven 2026-08-08 02:06:06 +03:00
parent 4b82fb1799
commit defe869c28
2 changed files with 45 additions and 0 deletions

View file

@ -0,0 +1,18 @@
# Линтер зоны полигона. ⚠ Заведён 08.08 после того, как оркестратор разобрал баг
# `med = med(costs)` в `verify_report.py:237`: присваивание делает имя локальным для ВСЕЙ
# функции, поэтому правая часть читает несуществующую локальную и падает `UnboundLocalError`.
# Компилятор решает это до запуска, глазами не видно. Цена была двадцать проверок гейта из
# сорока двух — вся денежная часть. Класс ловится pyflakes-семейством бесплатно и мгновенно.
#
# ⚠ Второе основание: файлы зоны несли подавления `# noqa: PLW0603`, `# noqa: PLC0415`,
# `# noqa: E402`, `# noqa: PLR0915` — то есть глушилки для проверяльщика, который НЕ ЗАПУСКАЛСЯ.
# У бэкенда и платформы линтер запинен и гоняется батареей; у полигона его не было, хотя код
# здесь пишет к ПЛАТНЫМ вызовам.
line-length = 100
target-version = "py313"
[lint]
# Узкий набор намеренно: ловим то, что ломает исполнение, а не стиль. Полигон пишет
# исследовательский код, и широкий набор дал бы шум вместо сигнала.
select = ["F", "E9", "PLE", "B"]
ignore = ["E402", "B008"]

View file

@ -317,6 +317,33 @@ def main() -> None: # noqa: PLR0915
# ⚠ ПОКРЫТИЕ ТЕГОВ КАССАМИ. Ревью 07.08: $2.62646 куплено тегами, не входящими ни в один # ⚠ ПОКРЫТИЕ ТЕГОВ КАССАМИ. Ревью 07.08: $2.62646 куплено тегами, не входящими ни в один
# глоб ни одной `Ledger` — класс дефекта, который шапка `buy.py` объявляет починенным. # глоб ни одной `Ledger` — класс дефекта, который шапка `buy.py` объявляет починенным.
# Проверка не запрещает исторические траты, а требует, чтобы непокрытая сумма была НАЗВАНА. # Проверка не запрещает исторические траты, а требует, чтобы непокрытая сумма была НАЗВАНА.
# ⚠ ПРОВЕРКИ ДРЕЙФА, утраченные при восстановлении после инцидента 08.08 (было 63 проверки,
# стало 56). Числа берутся из того же модуля, которым считаются, и сверяются с ТЕКСТОМ отчёта.
print("\n=== §ДРЕЙФ ===")
try:
sys.path.insert(0, str(Path(__file__).parent))
import drift as DR # noqa: PLC0415
ch = DR.chapters()
common = [c for c in ch if all(DR.text(a, c["uid"]).strip() for a in DR.DRIFT_ARMS)]
ck(f"общих глав у всех армов: {len(common)}",
re.search(rf"Общих глав у всех армов: {len(common)}(?!\d)", text) is not None
or num_in(text, f"{len(common)} глав"), str(len(common)))
for a in DR.DRIFT_ARMS:
s = c_ = 0
for zh, (_1, _2, r1, _3) in DR.BO.IP.TERMS.items():
for c in common:
n = c["source"].count(zh)
if not n:
continue
s += n
c_ += min(len(re.findall(r1, DR.text(a, c["uid"]), re.I)), n)
ck(f"дрейф {a}: покрытие {c_}/{s} напечатано в отчёте",
num_in(text, f"{c_}/{s}") or num_in(text, f"{c_ / s:.2f}"), f"{c_}/{s}")
ck(f"касса дрейфа ${DR.LED_DRIFT.spent():.5f} ≤ потолка ${DR.CEIL_DRIFT:.2f}",
DR.LED_DRIFT.spent() <= DR.CEIL_DRIFT, f"{DR.LED_DRIFT.spent():.5f}")
except Exception as e: # noqa: BLE001
ck(f"дрейф проверяется гейтом ({type(e).__name__})", False, str(e)[:60])
print("\n=== ПОКРЫТИЕ ТРАТ КАССАМИ ===") print("\n=== ПОКРЫТИЕ ТРАТ КАССАМИ ===")
covered = ("bo2-", "bo4-", "jv2-", "bo3-", "jf-", "jr-", "en2-", "jve-", "jc-", "dr-") covered = ("bo2-", "bo4-", "jv2-", "bo3-", "jf-", "jr-", "en2-", "jve-", "jc-", "dr-")
unc = 0.0 unc = 0.0