diff --git a/docs/experiments/23-editor-tier.md b/docs/experiments/23-editor-tier.md index 12ca0dd6..25026d47 100644 --- a/docs/experiments/23-editor-tier.md +++ b/docs/experiments/23-editor-tier.md @@ -4856,13 +4856,16 @@ n=15 ед (7.4 главы Гу) круг 1 · n=12 ед (5.9 главы Гу) о файлах нет). Суб-агент наследует модель сессии, а я **не передал переопределения и не проверил, что уехало.** -**Чем читал круг 1.** `READERS-vendor.json`, `READERS-vendor2.json`, `READERS-zhpanel.json` несут -`"_модель": "fable-5, по одному агенту на главу"`; `READERS-arch2.json` несёт то же во вложенном -ключе `читатель.модель = "claude-fable-5"` вместе с основанием — решение владельца 20.08 «забьём на -Sol, отдадим всё судейство фаблу». Это САМО-ОБЪЯВЛЕНИЕ прошлой сессии: транскриптов её читателей на -диске не осталось, и независимо подтвердить его нечем. Оно согласовано по четырём панелям и -совпадает с записанным решением владельца, поэтому принимаю его как верное — и помечаю как -непроверяемое. +**Чем читал круг 1 — ПОДТВЕРЖДЕНО ФАКТОМ, а не декларацией.** Предыдущая сессия по запросу +владельца подняла свой транскрипт и пере-считала вызовы: **58 вызовов `Agent` с пакетом из +`~/books/chtenie-rol/`, у КАЖДОГО в параметрах `model: 'fable'`** — `arch2` 15 · `vendor2` 15 · +`vendor` 13 · `zhpanel` 12 · `abl`+`rol` 3. Ни одного `opus-5` среди читателей не было. Декларации +`READERS-*.json` («fable-5» / `читатель.модель = "claude-fable-5"`) с фактом совпали, и сверено это +отдельно — сама по себе декларация не доказывает ничего. + +⚠ Уточнение той же сессии, которое надо держать рядом: `opus-5` в прошлых прогонах был +ОРКЕСТРАТОРОМ (собирал пакеты, считал ранги, сводил), но **прибором не был ни разу**. И агенты +глобального ревью 21.08 (231 штука) — **тоже `fable`**: и прибор, и его аудитор были одной моделью. ⇒ **ВТОРОЕ ЧТЕНИЕ ЕСТЬ КРОСС-СЕМЕЙНОЕ, А НЕ ПОВТОР ОДНИМ ПРИБОРОМ.** @@ -4927,3 +4930,46 @@ Sol, отдадим всё судейство фаблу». Это САМО-ОБ ⚠ Вся середина панели (`ZP`, `Z7`, `Z1`, `Z8R`, `RN`, `RB`, `RC`, `ZF`) — «в пределах» в обоих кругах и в обоих семействах. Это САМОЕ сильное «неразличимо», какое фаза произвела: оно устояло против смены выборки, смены читателя и смены модели читателя разом. + +### Д33.9 ⭐⭐ ВТОРОЕ СУДЕЙСКОЕ СЕМЕЙСТВО — ПОЯВИЛОСЬ ПО ОШИБКЕ, И ОНО СОГЛАСНО С ПЕРВЫМ + +Заказано владельцем 23.08 после разбора Д33.6: «раз уж ты пробежал какое-то судейство другим +агентом, заодно можно и сравнить будет их». До этого дня фаза жила с ограничением, записанным +прямым текстом в `READERS-arch2.json`: **судейское семейство ровно ОДНО, норма П-1 о двух не +исполняется, Sol запаркован решением владельца 20.08.** Следствие оговаривалось честно: общий ВКУС +`fable` от качества перевода не отделим в принципе, пока второго семейства нет. + +Круг 2 дал второе семейство. Сравнение — поармный сдвиг среднего места, парно по главам, знаковый +тест (сдвиг >0 = `opus` ставит арм НИЖЕ, чем `fable`): + +| панель | армов | наибольший сдвиг | наименьший p | **армов, судимых различимо по-разному** | +|---|---|---|---|---| +| `vendor2` | 10 | `RK` +0.50 / `RGT` −0.75 (из 10 мест) | 0.289 | **0 из 10** | +| `arch2` | 11 | `ZD` +1.08 / `RN` −1.08 (из 11 мест) | 0.070 (`ZF`) | **0 из 11** | + +⇒ **Ни один арм из 21 два семейства не упорядочивают различимо по-разному.** Ближе всех к границе +`ZF` на архитектурной панели (`opus` ставит её ниже на 1.04 места, 7 глав из 8 в одну сторону, +p=0.070) — единственный кандидат в «разный вкус», и он границы не перешёл. + +**Что это значит и чего НЕ значит:** + +* ⭐ **Ранговые вердикты фазы не являются идиосинкразией одной модели.** Всё, что `fable` назвал + различимым и что пережило второе чтение (`RKT` хуже якоря, `ZD` хуже связки), `opus` называет так + же; всё, что `fable` не разрешил, `opus` тоже не разрешает. +* ⛔ **Но это НЕ исполнение нормы П-1, и притворяться иначе нельзя.** `claude-fable-5` и + `claude-opus-5` — модели ОДНОЙ лаборатории и одной линии обучения. Их согласие снимает вопрос + «не выдумал ли конкретный прибор свой порядок» и **не снимает** вопрос «не выдумала ли его вся + эта линия». Внешним семейством был Sol, и он по-прежнему запаркован. ⇒ П-1 остаётся + НЕ ИСПОЛНЕННОЙ; засчитывать `opus` за второе семейство — самообман. +* ⚠ **Мощность у этой проверки слабая.** 12 глав, знаковый тест: чтобы получить p<0.05 при всех + расхождениях в одну сторону, нужно 6 глав с ненулевой разницей. «0 из 21 различимо» читается как + «крупных расхождений вкуса нет», а не как «вкусы тождественны». +* ⚠ **Места КОМПОЗИЦИОННЫ:** сумма сдвигов по построению ≈0, поэтому «сдвиг арма» есть утверждение + относительное. Абсолютной строгости («какое семейство придирчивее») этот прибор не видит. +* ⛔ **И то, что ни один машинный прибор не закрывает:** ось ВЕРНОСТИ, на которой владелец разошёлся + с `fable` радикально (Д30). Согласие двух моделей одной линии про эту ось не говорит ничего — + скорее наоборот, повышает вероятность, что расхождение с владельцем есть свойство ЛИНИИ. + +⚠ **И ещё одно, названное самой предыдущей сессией:** агенты глобального ревью 21.08 (231 штука) — +**тоже `fable`**. То есть и прибор, и его аудитор были одной моделью. Настоящая кросс-семейная +проверка ревью не проводилась ни разу. diff --git a/eval/dovodka/vtoroe.py b/eval/dovodka/vtoroe.py index d68d63c9..9cf08bfb 100644 --- a/eval/dovodka/vtoroe.py +++ b/eval/dovodka/vtoroe.py @@ -188,6 +188,44 @@ def report(tag: str = "vendor2", p: str = "en", anchor: str = "RN", drop: tuple return 0 +def vkus(tag: str = "vendor2", p: str = "en", drop: tuple = ()) -> int: + """СРАВНЕНИЕ ДВУХ СУДЕЙСКИХ СЕМЕЙСТВ — то, чего норме П-1 не хватало с 20.08. + + ⚠ Заведено 23.08 по слову владельца: «раз уж ты пробежал какое-то судейство другим агентом, + заодно можно и сравнить будет их». До этого дня всё судейство фазы вело ОДНО семейство + (`fable-5`), и общий ВКУС семейства нельзя было отделить от качества перевода в принципе — + ограничение записано в `READERS-arch2.json` как ⚠_ограничение. Круг 2 дал второе семейство + (`opus-5`) — пусть и по моей ошибке, а не по замыслу. + + ⛔ ЧТО МЕРИТСЯ И ЧТО НЕТ. Места КОМПОЗИЦИОННЫ: если один арм поднялся, другой обязан опуститься, + и сумма мест по главе константна. Значит «систематический сдвиг арма» есть утверждение + ОТНОСИТЕЛЬНОЕ — «семейства по-разному упорядочивают», — а не «одно строже другого». Абсолютной + строгости этот прибор не видит и видеть не может. + """ + r1, r2 = ranks_of(tag, p, "r1"), ranks_of(tag, p, "r2") + uids = [u for u in sorted(set(r1) & set(r2)) if u not in drop] + arms = sorted(r1[uids[0]]) + print(f"\n=== ВКУС ДВУХ СЕМЕЙСТВ, {tag}: fable-5 (круг 1) против opus-5 (круг 2) ===") + print(f" глав {len(uids)} · армов {len(arms)}\n") + print(f" {'арм':6s}{'fable':>8s}{'opus':>8s}{'сдвиг':>8s}{'глав ↑':>8s}{'глав ↓':>8s}{'p':>9s} вывод") + rows = [] + for a in arms: + d = [r2[u][a] - r1[u][a] for u in uids] # >0 — opus ставит НИЖЕ (место больше) + m = st.mean(d) + nz = [x for x in d if x] + pv = ZS._sign_p(d) # noqa: SLF001 + rows.append((a, st.mean([r1[u][a] for u in uids]), st.mean([r2[u][a] for u in uids]), + m, sum(1 for x in nz if x < 0), sum(1 for x in nz if x > 0), pv)) + for a, m1, m2, m, up, dn, pv in sorted(rows, key=lambda x: x[3]): + mark = "⛔ opus судит ИНАЧЕ" if pv < 0.05 else "" + print(f" {a:6s}{m1:8.2f}{m2:8.2f}{m:+8.2f}{up:8d}{dn:8d}{pv:9.4f} {mark}") + sig = [r for r in rows if r[6] < 0.05] + print(f"\n армов, чьё место семейства ставят РАЗЛИЧИМО по-разному: {len(sig)} из {len(arms)}" + + ("" if not sig else " — " + ", ".join(r[0] for r in sig))) + print(" ⚠ сдвиг >0 значит «opus ставит арм НИЖЕ, чем fable»; сумма сдвигов по построению ≈0") + return 0 + + def cmd_selftest() -> int: bad = 0 @@ -229,4 +267,6 @@ if __name__ == "__main__": _tag = next((x.split("=", 1)[1] for x in a if x.startswith("--tag=")), "vendor2") _anch = next((x.split("=", 1)[1] for x in a if x.startswith("--anchor=")), "RN") _drop = tuple(next((x.split("=", 1)[1].split(",") for x in a if x.startswith("--drop=")), [])) + if "--vkus" in a: + sys.exit(vkus(_tag, "en", _drop)) sys.exit(report(_tag, "en", _anch, _drop))