Add the panel gate for truncated cells and record the judging-run audit with its two incidents
This commit is contained in:
parent
f8fbac367d
commit
22820288b2
2 changed files with 166 additions and 3 deletions
|
|
@ -3459,3 +3459,150 @@ RG glm-5 0.0029 0 1 600 ← НОЛЬ
|
|||
факт **$0.1546** за 32 клетки, все `finish=stop`, гейт годности не поднял ни одной. Оба чужих
|
||||
вендора оказались кратно дешевле `dspro` в этой роли: `glm-5` в 9.6 раза, `grok-4.3` в 4.1 раза.
|
||||
Риск «grok разгонит размышление ×163» НЕ реализовался: 737 токенов против 6 139 у `dspro`.
|
||||
|
||||
## Д26 — ⭐ ВТОРАЯ ПАРА: КИТАЙСКАЯ ПАНЕЛЬ ТЕМ ЖЕ ПРИБОРОМ. РЕПЛИКАЦИЯ И ЕЁ ГРАНИЦА
|
||||
|
||||
12 глав китайской пары, 8 архитектур, один читатель на главу, из УЖЕ КУПЛЕННОГО — $0.
|
||||
Сессия #96 журнала, идентичность читателей записана ДО. Аудит: 12 читателей, по 4–9 вызовов,
|
||||
по 2 пути у каждого, запретных обращений 0, чужих глав 0. Сборка сверена гейтом `--verify-read`:
|
||||
96 текстов побайтно против клеток, совпадающих армов нет, раскладок 12 разных.
|
||||
|
||||
⚠ 4 главы из 16 пропущены и это НАПЕЧАТАНО: у них нет клетки `Z8R`. Промт-роль (`RN`) в панель не
|
||||
взята сознательно — её клеток на zh 14 из 16, и включение срезало бы выборку до 7 глав. После
|
||||
сегодняшнего же урока про размер выборки это плохой размен; вывод о промте-роли на китайской паре
|
||||
остаётся НЕ ВЫНЕСЕННЫМ, а не вынесенным на семи главах.
|
||||
|
||||
### Д26.1 Порядок
|
||||
|
||||
```
|
||||
арм ср. место (zh) место на en что это
|
||||
Z1 3.17 5.20 критик → ПОЛНЫЙ перепис
|
||||
ZP 3.21 5.57 однопроходка-склейка
|
||||
Z0 3.29 4.17 боевая связка, продакшен
|
||||
Z7 3.79 5.70 однопроходка + канон-фиксер
|
||||
Z8R 4.00 5.50 обогащённый черновик + перепис
|
||||
ZF 4.21 3.63 боевая связка, 2-я генерация
|
||||
ZD 7.08 8.20 голый черновик
|
||||
Z8 7.25 9.30 обогащённый черновик без переписа
|
||||
|
||||
пол Z0/ZF: −0.92 при пороге 2.23 — НЕразличимы, как обязаны (контроль ЗЕЛЁНЫЙ)
|
||||
декой ZD : внизу на 11 главах из 12 (контроль ЗЕЛЁНЫЙ)
|
||||
|
||||
связка ↔ Z1 −0.58 порог 1.93 в пределах
|
||||
связка ↔ ZP −0.54 порог 1.81 в пределах
|
||||
связка ↔ Z7 +0.04 порог 1.81 в пределах
|
||||
связка ↔ Z8R +0.25 порог 2.26 в пределах
|
||||
связка ↔ ZD +3.33 порог 1.28 РАЗЛИЧИМ p=0.0005
|
||||
связка ↔ Z8 +3.50 порог 1.29 РАЗЛИЧИМ p=0.0010
|
||||
```
|
||||
|
||||
### Д26.2 ⭐⭐ ЧТО РЕПЛИЦИРОВАЛОСЬ, А ЧТО — НЕТ. Это главный вывод дуги
|
||||
|
||||
**Реплицировалось в точности, на обеих парах, обоими контролями зелёными:**
|
||||
1. **Второй проход нужен.** `ZD` различимо последний и там, и там (en +4.30, zh +3.33).
|
||||
2. **Обогащение промта черновика вредит.** `Z8` — единственный арм, стоящий НИЖЕ голого черновика
|
||||
на ОБЕИХ парах. Прежде это было утверждение на грани; теперь оно различимо дважды.
|
||||
3. **Всё остальное — в пределах порога.** Шесть (en) и четыре (zh) арма середины неразличимы
|
||||
от продакшена ни на одной паре.
|
||||
|
||||
⛔ **НЕ реплицировалось: ПОРЯДОК ВНУТРИ СЕРЕДИНЫ.** На английской паре боевая связка забрала первые
|
||||
два места; на китайской она третья, а впереди стоят критик-перепис и однопроходка. Разрывы при
|
||||
этом с обеих сторон меньше порога — то есть **перестановка середины и есть наблюдаемый шум**,
|
||||
а не открытие о китайской паре.
|
||||
|
||||
⇒ **Формулировку Д24.3 №1 («боевую связку не обошёл никто») читать вместе с этим: она верна для
|
||||
английской панели и НЕ верна для китайской.** Это ровно та норма, которую фаза записала 20.08 и
|
||||
тут же нарушила: эффект, замеренный на одной паре, не называть свойством, пока он не проверен на
|
||||
второй. Правильная формулировка одна: **ни одна архитектура второго прохода не отличима от другой
|
||||
ни на одной паре.**
|
||||
|
||||
### Д26.3 Что это значит для продукта
|
||||
|
||||
Если четыре схемы второго прохода неразличимы по качеству на 27 главах двух пар при зелёных
|
||||
контролях, то **выбирать между ними надо не качеством, а ценой, детерминизмом и простотой** —
|
||||
качество их не различает, и дальнейшие замеры этого класса покупают шум.
|
||||
|
||||
Практический порядок кандидатов при равенстве качества:
|
||||
* **однопроходка** — ОДИН дорогой вызов вместо двух, и по банку терминов она уже выигрывала на
|
||||
обеих парах (zh 1.38 против 2.88, en 0.31 против 0.56);
|
||||
* **боевая связка** — два вызова, зато дешёвый черновик выносит письмо из дорогого канала
|
||||
размышления (механизм Д-трейса) и результат промежуточной стадии виден и переиспользуем;
|
||||
* **критик → полный перепис** — два дорогих вызова, преимущества по качеству не показал;
|
||||
* **обогащённый черновик** — ОТРИЦАТЕЛЬНО дважды, снимается с рассмотрения.
|
||||
|
||||
⛔ Оговорки те же и не смягчаются: одно судейское семейство · один читатель на главу ·
|
||||
один жилец в роли переводчика.
|
||||
|
||||
## Д27 — АУДИТ ПРОГОНА СУДЕЙСТВА (вопрос владельца 21.08: «прошло без инцидентов?»)
|
||||
|
||||
Проверялось ИСПОЛНЕНИЕМ, а не по памяти. Четыре линии.
|
||||
|
||||
### Д27.1 Получили ли читатели ровно то, что задумано
|
||||
|
||||
```
|
||||
en/arch2 165 текстов побайтно = клетки своих армов · 15 раскладок разных · имён армов 0
|
||||
zh/zhpanel 96 текстов побайтно = клетки своих армов · 12 раскладок разных · имён армов 0
|
||||
исходник каждой главы — тот самый · «торопиться не надо» в каждом пакете
|
||||
аудит транскриптов: 27 читателей, по 2 пути у каждого (свой пакет, свой ответ),
|
||||
запретных обращений 0, чужих глав 0, дифф-инструментов 0
|
||||
```
|
||||
|
||||
### Д27.2 ⛔ ИНЦИДЕНТ 1: панель показывала МЕНЬШЕ текстов, чем армов
|
||||
|
||||
`Z7` ≡ `ZP` побайтно на 12 английских главах из 15 (Д23.6). Читатели это НАШЛИ САМИ и связали
|
||||
знаком `=`. Задумано было 11 различных текстов — фактически показано 10.
|
||||
**Следствие для вердикта:** место `Z7` на этих главах есть место `ZP`; арм «однопроходка +
|
||||
канон-фиксер» отсужен фактически на 3 главах. Прочих армов не касается.
|
||||
|
||||
### Д27.3 ⛔ ИНЦИДЕНТ 2: в китайскую панель прошла ОБОРВАННАЯ клетка продакшена
|
||||
|
||||
Глава `41599f30df`, арм `Z0`: `finish=length` (упёрлась в потолок вывода 16 000), 5 759 знаков
|
||||
против медианы панели 6 888. Читатель законно поставил её последней — у текста оборвана
|
||||
кульминация сцены.
|
||||
|
||||
**Причина найдена в коде, а не угадана:** `contour.base_a0` (источник арма `Z0`) читает `content`
|
||||
БЕЗ проверки `finish`, тогда как соседний `base_draft` гейт годности имеет на обеих ветках.
|
||||
Щель ровно в одну функцию. Масштаб замерен: **из 22 клеток боевой связки оборвана ОДНА**;
|
||||
у второй генерации (`ZF`) такая клетка тоже есть, но она уже была в карантине и в панель не попала.
|
||||
|
||||
**Чувствительность посчитана и печатается, а не прячется** (`--drop=41599f30`):
|
||||
```
|
||||
все 12 глав без оборванной (11)
|
||||
Z0 3.29 2.86 ← из третьего места в первое
|
||||
ZP 3.21 3.32
|
||||
Z1 3.17 3.36
|
||||
контроль пола −0.92 / 2.23 −1.36 / 2.05 (оба раза НЕразличимы)
|
||||
ZD / Z8 различимо последние в обоих сводах
|
||||
```
|
||||
⇒ **Качественный вердикт устоял:** середина неразличима, низ различим, контроли зелёные.
|
||||
**Порядок внутри середины перевернулся от ОДНОЙ главы** — что само по себе третье независимое
|
||||
подтверждение Д26.2: этот порядок и есть шум.
|
||||
|
||||
**Лечение — гейт, а не правка данных.** `--verify-read` теперь роняет сборку, если текст арма
|
||||
короче 0.85 медианы панели. Проверен на больном входе (ловит `41599f30`) и молчит на английской
|
||||
панели. Правку самого `base_a0` сессия НЕ делает: он питает ВСЕ прошлые замеры фазы, и тихая
|
||||
смена его поведения рассогласовала бы их с уже вынесенными вердиктами. **Это вопрос владельцу.**
|
||||
|
||||
### Д27.4 Ошибки в выводах читателей — искали, не нашли
|
||||
|
||||
* **Разбор порядка однозначен.** В каждом из 27 ответов ровно ОДНА цепочка полной длины
|
||||
(следующая по длине — 2–3 метки), метки не повторяются, разобранный порядок совпадает с тем,
|
||||
что читатель назвал словами.
|
||||
* **Все 12 английских заявлений «совпадают дословно» — ВЕРНЫ** (проверено побайтно). Ни одного
|
||||
ложного заявления о тождестве.
|
||||
* **Три китайских заявления, помеченных моей проверкой как ложные, оказались ЛОЖНОЙ ТРЕВОГОЙ
|
||||
ПРОВЕРКИ.** Читатели писали «совпадают ПРАКТИЧЕСКИ дословно» и тут же называли расхождение;
|
||||
мой матчер цеплялся за слово «дословн» и за соседнее предложение о другой паре. Вскрыто чтением
|
||||
самих строк — не отменено. Класс уже известен фазе (ложная тревога 20.08 про слово «метки»).
|
||||
* **Выборочная проверка содержательных утверждений — 4 из 4 подтвердились побайтно:**
|
||||
«единственное расхождение Т1/Т7» (различаются ровно два слова) · «у варианта выпало первое
|
||||
предложение исходника» (выпало) · «текст оборван на середине фразы» (оборван — это инцидент 2) ·
|
||||
«девиз инвертирован» («Пусть нас всегда больше… Зато мы всегда сильнее» против «в меньшинстве,
|
||||
но никогда не слабее»).
|
||||
|
||||
### Д27.5 Что осталось НЕ проверенным и это не смягчается
|
||||
|
||||
Одно судейское семейство · один читатель на главу (разброс прибора не мерен ни разу) ·
|
||||
английский исходник подаётся моделям одним блоком без авторских абзацев (наш баг экстрактора,
|
||||
Д-долг бэкенду) — читателям он показан таким же, каким его видели все армы, поэтому контраст
|
||||
честен, но материал искажён у ВСЕХ одинаково.
|
||||
|
|
|
|||
|
|
@ -889,6 +889,17 @@ def verify_read(tag_: str, p: str) -> int:
|
|||
bad.append(f"{uid8}: имя арма {arm} стоит в пакете")
|
||||
if "торопиться не надо" not in txt:
|
||||
bad.append(f"{uid8}: нет указания владельца «торопиться не надо»")
|
||||
# ⚠ ОБОРВАННАЯ КЛЕТКА В ПАНЕЛИ. `contour.base_a0` (арм `Z0`) читает `content` БЕЗ проверки
|
||||
# `finish`, в отличие от `base_draft`, у которого гейт есть на обеих ветках. Через эту щель
|
||||
# в китайскую панель прошла клетка с `finish=length` (21.08), и читатель законно поставил
|
||||
# продакшен последним за оборванную кульминацию. Гейт стоит ЗДЕСЬ, потому что ловит класс
|
||||
# независимо от источника: текст, который короче медианы панели, панель ломает.
|
||||
ln = {a: len(t) for a, t in var.items()}
|
||||
med = st.median(ln.values())
|
||||
for lab, v in ln.items():
|
||||
if med and v / med < 0.85:
|
||||
bad.append(f"{uid8}: {lay[lab]} короче медианы панели ({v} против {med:.0f}, "
|
||||
f"{v / med:.2f}) — похоже на оборванную клетку")
|
||||
seen: dict = {}
|
||||
for lab, body in var.items():
|
||||
if body in seen:
|
||||
|
|
@ -910,8 +921,11 @@ def verify_read(tag_: str, p: str) -> int:
|
|||
return 1 if bad else 0
|
||||
|
||||
|
||||
def score_arch(tag_: str = "arch2", p: str = "en") -> int:
|
||||
def score_arch(tag_: str = "arch2", p: str = "en", drop: tuple = ()) -> int:
|
||||
"""`drop` — РЫЧАГ ЧУВСТВИТЕЛЬНОСТИ, не способ получить нужный ответ. Печатается в шапке свода,
|
||||
и вывод, который живёт только при выброшенной главе, обязан называться вместе с ней."""
|
||||
keys = sorted((OUT / "blind-keys-rol").glob(f"rol-KEY-{tag_}-*.json"))
|
||||
keys = [k for k in keys if k.stem.split(f"{tag_}-")[1] not in drop]
|
||||
if not keys:
|
||||
raise SystemExit(f"⛔ ключей тега {tag_} нет")
|
||||
ranks: dict = {}
|
||||
|
|
@ -943,7 +957,8 @@ def score_arch(tag_: str = "arch2", p: str = "en") -> int:
|
|||
if var.get(rev["Z7"]) == var.get(rev["ZP"]):
|
||||
ident.append((uid8, abs(r["Z7"] - r["ZP"])))
|
||||
n = len(twins)
|
||||
print(f"\n=== СВОД {tag_}, пара {p}: глав отсужено {n} из {len(keys)} ===")
|
||||
print(f"\n=== СВОД {tag_}, пара {p}: глав отсужено {n} из {len(keys)} ==="
|
||||
+ (f"\n ⚠ ВЫБРОШЕНЫ ГЛАВЫ: {', '.join(drop)} — свод УСЛОВНЫЙ" if drop else ""))
|
||||
for uid8, why in bad:
|
||||
print(f" ⚠ {uid8}: {why}")
|
||||
if not n:
|
||||
|
|
@ -1025,7 +1040,8 @@ if __name__ == "__main__":
|
|||
sys.exit(verify_read(_tag, next((x for x in a[1:] if x in PAIRS), "en")))
|
||||
elif a[0] == "--score-arch":
|
||||
_tag = next((x.split("=", 1)[1] for x in a if x.startswith("--tag=")), "arch2")
|
||||
sys.exit(score_arch(_tag, next((x for x in a[1:] if x in PAIRS), "en")))
|
||||
_drop = tuple(next((x.split("=", 1)[1].split(",") for x in a if x.startswith("--drop=")), []))
|
||||
sys.exit(score_arch(_tag, next((x for x in a[1:] if x in PAIRS), "en"), _drop))
|
||||
elif a[0] == "--coverage":
|
||||
for p in ([x for x in a[1:] if x in PAIRS] or list(PAIRS)):
|
||||
print(f"\n=== ПОКРЫТИЕ БОЕВЫХ ПРОМТОВ, пара {p} ===")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue