Land batch B6: the trigger registry declared four mechanisms unbuilt that ratified notes had closed, and its own summary contradicted its own body
This commit is contained in:
parent
6bd941f57d
commit
bd2077b075
2 changed files with 11 additions and 11 deletions
|
|
@ -86,7 +86,7 @@
|
|||
| 90 | **Ф2-кандидаты 02-mvp-плана без носителя** (свип-хвост, D39.73): CometKiwi/T-index метрики судьи · Batch API судьи (экономия) · llama-server-интеграция локали · стриминг — взять/закрыть при пилот-препе; + H16 самоулучшение (V3-п.2, ПТ-26): дизайн петли по данным судьи — тем же препом | полигон/бэкенд | когда-нибудь (Ф2.5) | пилот-преп-промт (с 85) | 02-mvp-plan, D39.66, D39.73, D39.80 |
|
||||
| **— НАХОДКИ СВИПА ПОЛНОТЫ (D39.66: 951 обязательство проверено, потери возвращены в трекер) —** | | | | | |
|
||||
| 80 | **Резюме-слой памяти** — проза-суммарайзер ЗАКРЫТ (D39.69); строка = ГЕЙТ ПИЛОТА Ф2.5: первый деливерабл пилота — «допускает ли автономная нарратив-состояние-строка ДЕТЕРМИНИРОВАННЫЙ верификатор (source-anchored) — или это D1-компаундинг со схемой»; не-покрытые классы (source-anchored reveal · арк-колбэки без ключа) реальны, но не измерены как дефект | Ф2.5 (Q3 подтверждён D39.70) | когда-нибудь (пилот) | Ф2.5 пре-рег | D25 п.8–9, D39.66, D39.69 |
|
||||
| 81 | **ja-преп B6-ja (сужено пост-сверкой D39.66)**: Поливанов-валидатор (`translit_policy` = «Phase 2»-заглушка, migrate.go:187/194) + kana-омограф POS/known-word гейтинг / B6-токенизатор (memory.go:1048); чек-лист kana-алиасов сида УЖЕ построен (backend/README §ja + `AttachRubyAliasesToManual`) — остаток в нём только дизамбигуация двойных чтений (тот же B6) | бэкенд | когда-нибудь (перед ja→ru) | ja→ru-пак (рядом 35) | D16.4, D17.1, D18, D39.66 |
|
||||
| 81 | **ja-преп B6-ja (сужено пост-сверкой D39.66)**: Поливанов-валидатор (`translit_policy` = «Phase 2»-заглушка, `backend/internal/store/migrate.go:187`=`translit_policy TEXT` и `backend/internal/store/migrate.go:195`=`ruby_reading`) + kana-омограф POS/known-word гейтинг / B6-токенизатор (`backend/internal/membank/memory.go:1077`=`KANA and HAN are deliberately NOT boundary-checked`); чек-лист kana-алиасов сида УЖЕ построен (backend/README §ja + `AttachRubyAliasesToManual`) — остаток в нём только дизамбигуация двойных чтений (тот же B6) | бэкенд | когда-нибудь (перед ja→ru) | ja→ru-пак (рядом 35) | D16.4, D17.1, D18, D39.66 |
|
||||
| 82 | **Морфо-гейт РОДА** (C3: русский глагол прош. вр. при gender=hidden = механический спойлер-канал; «жалоба №1 читателей MTL»; python-сайдкар/pymorphy, связка с морфопроходом Decl из 73). **$0-прототип получен эксп-21** (`battery.check_gender`: карточки из подписанного сида, фильтр по именительному падежу, 86–112 сверок/арм — D39.117); движковый гейт не построен | бэкенд | когда-нибудь (Ф2-гейты) | отдельный пак (с 52) | 06-реестр C3, research/12, D39.66, **D39.117** |
|
||||
| 85 | **Пилот-преп добор** (к переупаковке PACKAGE4): Bertalign GOLD-пары + zh→ru spot-check (D29.2в; GPL-тулинг отдельно) · fidelity-каскад R2 shadow с корпус-подготовкой (D25.2) · exp08 v3 пере-съём COGS до фиксации budget_usd (D21.8) | полигон | когда-нибудь (Ф2.5) | пилот-преп-промт | D25, D29, D21.8, D39.66 |
|
||||
| **— ПАК-21 «чекеры»: РАСТВОРЁН (D39.62); шестёрка исполнена 2/6 фазой 2 (D39.64: #11 · строка 26), остаток — ниже —** | | | | | |
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
### [RESCOPE] Строка 81 — ja-преп B6-ja: Поливанов-валидатор + kana-омограф POS/known-word гейтинг (D17.1) + чек-лист kana-алиасов сида (D16.4)
|
||||
|
||||
Два компонента реально отсутствуют: (1) Поливанов-валидатор — backend/internal/store/migrate.go:186 «translit_policy … field only in v1; validator = Phase 2» и :194 «ruby_reading … bridge to Polivanov dst validation, B6 Phase 2 — NOT a dst»; grep polivanov/Поливанов по backend/*.go даёт только значения конфига в тестах/примерах и комментарий backend/internal/config/book.go:50 — валидирующего кода нет. (2) kana-омограф гейтинг — backend/internal/membank/memory.go:1048–1051: «KANA and HAN are deliberately NOT boundary-checked … their ≥4 precision is deferred to the kana-precision measurement + the B6 tokenizer»; подтверждено D-логом (D17, тело — слайс `D1-D38`: митигация kana-омографов → «скоуп B6»). НО третий компонент УЖЕ ПОСТРОЕН: чек-лист kana-алиасов сида существует — backend/README.md:38 «## Подготовка ja-книги (чек-лист сида)» с пунктом «Kana-написания имён = matchable … внеси в aliases: руками — иначе „тихо пусто"», а сам механизм D16.4 (ruby-чтение → авто-алиас ручного термина с громким скипом омофонной коллизии) реализован: backend/internal/pipeline/bankmaterialize.go:88-94 (membank.AttachRubyAliasesToManual) — это ровно интерим-фикс из D16 п.4.
|
||||
Два компонента реально отсутствуют: (1) Поливанов-валидатор — `backend/internal/store/migrate.go:187`=`translit_policy TEXT` («field only in v1; validator = Phase 2») и `backend/internal/store/migrate.go:195`=`ruby_reading` («ruby_reading … bridge to Polivanov dst validation, B6 Phase 2 — NOT a dst»; grep polivanov/Поливанов по backend/*.go даёт только значения конфига в тестах/примерах и комментарий backend/internal/config/book.go:50 — валидирующего кода нет. (2) kana-омограф гейтинг — backend/internal/membank/memory.go:1048–1051: «KANA and HAN are deliberately NOT boundary-checked … their ≥4 precision is deferred to the kana-precision measurement + the B6 tokenizer»; подтверждено D-логом (D17, тело — слайс `D1-D38`: митигация kana-омографов → «скоуп B6»). НО третий компонент УЖЕ ПОСТРОЕН: чек-лист kana-алиасов сида существует — backend/README.md:38 «## Подготовка ja-книги (чек-лист сида)» с пунктом «Kana-написания имён = matchable … внеси в aliases: руками — иначе „тихо пусто"», а сам механизм D16.4 (ruby-чтение → авто-алиас ручного термина с громким скипом омофонной коллизии) реализован: backend/internal/pipeline/bankmaterialize.go:88-94 (membank.AttachRubyAliasesToManual) — это ровно интерим-фикс из D16 п.4.
|
||||
|
||||
**Фикс/скоуп:** Сузить строку 81 до двух реально отложенных работ: «Поливанов-валидатор (translit_policy Phase 2, store/migrate.go:186/194) + kana-омограф POS/known-word гейтинг / B6-токенизатор (memory.go:1048)»; компонент «чек-лист kana-алиасов сида (D16.4)» пометить built (backend/README.md:38 + bankmaterialize.go:92) — в чек-листе остаётся лишь Ф2-хвост «двойные чтения (強敵→とも) полная дизамбигуация», который и так под B6.
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ grep -rni 'VACUUM|integrity_check|backup' по backend/cmd/tmctl/ и backend/int
|
|||
|
||||
### [CONFIRMED_LOST] Строка 85 — пилот-преп добор: Bertalign GOLD-пары (D29.2в) · R2 shadow (D25.2) · exp08 v3 (D21.8)
|
||||
|
||||
Bertalign: grep -rni bertalign по eval/ и backend/ — 0 вхождений (нет ни кода, ни данных). exp08 v3: в docs/experiments/ существует только 08-cost-model-v2.md; его шапка (строка 3) прямо говорит «Пере-съём заказан как exp08 v3 (D21.8 … D25.8 …)» — т.е. заказан, не исполнен; в eval/ есть только cost_model_v2.py (v3-скрипта нет). Подтверждается и D-логом (D21): «→ exp08 v3 … до фиксации budget_usd-дефолтов Ф2» — висящее поручение, и 02-mvp-plan.md:34 «пере-съём exp08 v3» как открытый.
|
||||
Bertalign: grep -rni bertalign по eval/ и backend/ — 0 вхождений (нет ни кода, ни данных). exp08 v3: в docs/experiments/ существует только 08-cost-model-v2.md; его шапка (греп `Пере-съём заказан как exp08 v3`) прямо говорит «Пере-съём заказан как exp08 v3 (D21.8 … D25.8 …)» — т.е. заказан, не исполнен; в eval/ есть только cost_model_v2.py (v3-скрипта нет). Подтверждается и D-логом (D21): «→ exp08 v3 … до фиксации budget_usd-дефолтов Ф2» — висящее поручение, и 02-mvp-plan.md:34 «пере-съём exp08 v3» как открытый.
|
||||
|
||||
**Фикс/скоуп:** Не требуется — занесено правильно (пилот-преп-промт, Ф2.5); дельта уже вписана в docs/POLYGON_PACKAGE4_SESSION_PROMPT.md:4.
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi
|
|||
|
||||
**Фикс/скоуп:** Не требуется по существу; опционально при док-пассе поправить ссылку «D33.4б» на фактический носитель решения (серия D33.x в теле D33).
|
||||
|
||||
**Сводка среза:** Срез 81/83/85 + дописки 11/33/53/59 D39.66: 6 из 7 пунктов CONFIRMED_LOST — занесены правильно и живы. F4-бэкап (83): 0 вхождений VACUUM/integrity_check/backup во всём backend/, tmctl без такой подкоманды (main.go:73-83). Bertalign+exp08 v3 (85): bertalign 0 вхождений в eval/ и backend/, v3 «заказан» шапкой 08-cost-model-v2.md:3 и не исполнен. GLM-overflow (59): finish проходит RAW (provider_openai.go:166-171, тест «deferred GLM-overflow item»), classify() без ветки — пустой выход = ложно-retryable FlagEmpty, непустой = ложный OK. Внутрифайловый дубль (53): langpack.go:824 молчаливый last-wins, громкость только base↔overlay (langpack.go:466-474), открытость подтверждена PACK15-отчётом:274. Quote-absorption (11): coverage.go:39 = v1-naive, оба слоя (Go+refusal_bench.py) без поглощения, дефер в v1.1 задокументирован. Sanitizer в c2 (33): 0 вхождений в pipeline-c2.yaml при наличии в c1:87 и трёх arm-конфигах. ЕДИНСТВЕННЫЙ RESCOPE — строка 81: Поливанов-валидатор (migrate.go:186/194 «Phase 2») и kana-омограф гейтинг (memory.go:1048-1051 deferred) реально отсутствуют, но третий компонент «чек-лист kana-алиасов сида (D16.4)» уже построен — чек-лист написан (backend/README.md:38) и механизм авто-алиасов реализован (bankmaterialize.go:88-94, AttachRubyAliasesToManual); строку сузить до валидатора+гейтинга.
|
||||
**Сводка среза:** Срез 81/83/85 + дописки 11/33/53/59 D39.66: 6 из 7 пунктов CONFIRMED_LOST — занесены правильно и живы. F4-бэкап (83): 0 вхождений VACUUM/integrity_check/backup во всём backend/, tmctl без такой подкоманды (`backend/cmd/tmctl/main.go`, греп `dispatchCommands` — ⚠ **→ ЗАКРЫТО D39.82 (`9f60746`), см. строку 16: `tmctl backup` ПОСТРОЕН и стоит в списке команд; сводка свипа ниже — улика 26.07, не переписывается**). Bertalign+exp08 v3 (85): bertalign 0 вхождений в eval/ и backend/, v3 «заказан» шапкой 08-cost-model-v2.md:3 и не исполнен. GLM-overflow (59): finish проходит RAW (provider_openai.go:166-171, тест «deferred GLM-overflow item»), classify() без ветки — пустой выход = ложно-retryable FlagEmpty, непустой = ложный OK. Внутрифайловый дубль (53): langpack.go:824 молчаливый last-wins, громкость только base↔overlay (langpack.go:466-474), открытость подтверждена PACK15-отчётом:274. Quote-absorption (11): coverage.go:39 = v1-naive, оба слоя (Go+refusal_bench.py) без поглощения, дефер в v1.1 задокументирован. Sanitizer в c2 (33): 0 вхождений в pipeline-c2.yaml при наличии в c1:87 и трёх arm-конфигах. ЕДИНСТВЕННЫЙ RESCOPE — строка 81: Поливанов-валидатор (migrate.go:186/194 «Phase 2») и kana-омограф гейтинг (memory.go:1048-1051 deferred) реально отсутствуют, но третий компонент «чек-лист kana-алиасов сида (D16.4)» уже построен — чек-лист написан (backend/README.md:38) и механизм авто-алиасов реализован (bankmaterialize.go:88-94, AttachRubyAliasesToManual); строку сузить до валидатора+гейтинга.
|
||||
|
||||
## Срез: строки 80/82/84 + кандидаты 73
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi
|
|||
|
||||
### [CONFIRMED_LOST] Строка 82: морфо-гейт РОДА (C3, глагол прош. вр. при gender=hidden)
|
||||
|
||||
В checks/*.go НОЛЬ упоминаний gender (grep gender по backend/internal/checks/ пуст); checks/sanitizer.go:83 и :429 прямо документируют «NOT offline-detectable without a morphology/dictionary pass (Ф2) — left silent»; pymorphy в бэкенде существует только в комментах ОТБРОШЕННОГО pymorphy3-подканала лемматизатора майнера (miner/miner.go:18-23, дефолт B). Gender в банке хранится как TEXT «male|female|hidden|''» (store/migrate.go:183; membank/memory.go:140); hidden даёт лишь ИНЪЕКЦИЮ-мандат избегать род-маркирующих конструкций (memory.go:810-823, GenderHidden-текст), а ДЕТЕКТОРА нарушения нет — membank.SpoilerLeaks проверяет только появление dst-поверхности до окна (mempostcheck.go:205-224), не род глагола. Отложенность зафиксирована 06-memory-risk-registry.md:105 («Отложено в v1.1/Фазу 2 … морфо-гейт глагольного рода (C3)») — жива, не закрыта.
|
||||
В checks/*.go НОЛЬ упоминаний gender (grep gender по backend/internal/checks/ пуст); checks/sanitizer.go:83 и :429 прямо документируют «NOT offline-detectable without a morphology/dictionary pass (Ф2) — left silent»; pymorphy в бэкенде существует только в комментах ОТБРОШЕННОГО pymorphy3-подканала лемматизатора майнера (miner/miner.go:18-23, дефолт B). Gender в банке хранится как TEXT «male|female|hidden|''» (store/migrate.go:183; membank/memory.go:140); hidden даёт лишь ИНЪЕКЦИЮ-мандат избегать род-маркирующих конструкций (memory.go:810-823, GenderHidden-текст), а ДЕТЕКТОРА нарушения нет — membank.SpoilerLeaks проверяет только появление dst-поверхности до окна (mempostcheck.go:205-224), не род глагола. Отложенность зафиксирована 06-memory-risk-registry.md (греп по названию пункта — номера съехали +6 коммитом d2cd30c) («Отложено в v1.1/Фазу 2 … морфо-гейт глагольного рода (C3)») — жива, не закрыта.
|
||||
|
||||
**Фикс/скоуп:** Строка верна как есть (python-сайдкар/pymorphy, связка с морфопроходом Decl из 73).
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi
|
|||
|
||||
Канон ратифицирован (D39.21; ⚠ прежний якорь вёл в строку карты шапки, которой в живом логе БОЛЬШЕ НЕТ — проверено грепом 24.08: «D39.21 = … generic-«гу» СРЕДНИЙ род, именные — по-термово из банка»), ⚠ **ПЕРЕ-СВЕРЕНО 23.08 (№19): ЧЕТЫРЕ пункта из пяти ПРОТУХЛИ — носитель в коде ПОСТРОЕН.** Было «носителя в коде НЕТ». Стало, по фактам: (1) `genderConstraintNote` принимает `neuter`/`n` и отдаёт `tx.GenderNeuter` (`backend/internal/membank/memory.go:842-850`=`case "neuter", "n":`) — прежний якорь `:815-823` съехал; (2) ключ пары ЕСТЬ — `GenderNeuter` в структуре и в разборе (`backend/internal/lang/embedded.go:398`=`GenderNeuter string`, `:456`=`case "gender_neuter":`); (4) `neuter` встречается в `lang/embedded.go`, `lang/data/injection.txt`, `membank/memory.go` и двух тестах — грепа «0 хитов» больше нет; (5) род ВАЛИДИРУЕТСЯ: `knownGenders` включает `neuter`/`n`, а `GenderVocabViolations` ловит выход из словаря, и её собственный докстринг называет этот класс (`backend/internal/membank/memseed.go:542`=`var knownGenders = map[string]bool{`). **ЖИВЫМ ОСТАЁТСЯ РОВНО ПУНКТ (3):** комментарий схемы БД до сих пор перечисляет `male|female|hidden|''` без neuter (`backend/internal/store/migrate.go:184`=`male|female|hidden|`) — и прежний якорь звал `:183`, то есть был на строку мимо. Это косметика комментария, не поведение. Альтернативный носитель decl.Invariant существует (memory.go:128,151,311; seed.go:85), но несёт лишь несклоняемость формы, не род для согласования глагола/прилагательных.
|
||||
|
||||
**Фикс/скоуп:** Строка верна; уточнение в тело: (а) сегодня `gender: neuter` в сиде — ТИХИЙ no-op без линта, т.е. дыра хуже «невыразимо» — при стройке носителя добавить и seed-lint-отбраковку неизвестных значений рода; (б) «decl.invariant достаточно» закрывает только несклоняемость, не согласование — фиксировать это в формулировке альтернативы.
|
||||
**Фикс/скоуп:** Строка верна; уточнение в тело: (а) ⚠⚠ **ОБЕ ПОЛОВИНЫ ЛОЖНЫ И ПРОТИВОРЕЧАТ РАТИФИЦИРОВАННОМУ (испр. 02.09): D39.69 §3 объявил строки 27/84 ЗАКРЫТЫМИ — `neuter` работает end-to-end (enum · `gender_neuter` в инъекционных данных · SeedLint ГРОМКО отбраковывает неизвестный род). Прежний текст «тихий no-op без линта» — снимок ДО D39.69.** Историческая формулировка: сегодня `gender: neuter` в сиде — тихий no-op без линта, при стройке носителя добавить и seed-lint-отбраковку неизвестных значений рода; (б) «decl.invariant достаточно» закрывает только несклоняемость, не согласование — фиксировать это в формулировке альтернативы.
|
||||
|
||||
### [RESCOPE] Кандидат 73: ranked-set (инъективность рангов)
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi
|
|||
|
||||
### [CONFIRMED_LOST] Кандидат 73: эмбеддинг-второй-эшелон A7/D2 (дать диспозицию)
|
||||
|
||||
В ДВИЖКЕ ретривала по эмбеддингам нет: единственные следы — плейсхолдер-колонка `embedding_tier_used INTEGER NOT NULL DEFAULT 0, -- always 0 in v1 (no embeddings on the hot path, Р3)` (store/migrate.go:248) и её протаскивание в store/glossary.go:71,305-391; miner_substrate.go:15 прямо декларирует «$0, no LLM, no embeddings»; grep cosine/vector/embedding по internal/ иных хитов не даёт. В eval бенч существует (eval/retrieval_bench.py). Реестр держит A7/D2 отложенными в Ф2 low-trust (06-memory-risk-registry.md:32,61,105) — живо, не закрыто.
|
||||
В ДВИЖКЕ ретривала по эмбеддингам нет: единственные следы — плейсхолдер-колонка `embedding_tier_used INTEGER NOT NULL DEFAULT 0, -- always 0 in v1 (no embeddings on the hot path, Р3)` (store/migrate.go:248) и её протаскивание в store/glossary.go:71,305-391; miner_substrate.go:15 прямо декларирует «$0, no LLM, no embeddings»; grep cosine/vector/embedding по internal/ иных хитов не даёт. В eval бенч существует (eval/retrieval_bench.py). Реестр держит A7/D2 отложенными в Ф2 low-trust (06-memory-risk-registry.md (греп по названию пункта — номера съехали +6 коммитом d2cd30c),61,105) — живо, не закрыто.
|
||||
|
||||
**Фикс/скоуп:** → **Закрыто по нужности D39.69 (реопен: измеренный recall-разрыв на масштабе).** (Исторически: занесено как «дать диспозицию»; формулировка точна.)
|
||||
|
||||
|
|
@ -97,11 +97,11 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi
|
|||
|
||||
### [CONFIRMED_LOST] Кандидат 86/73: feed_cap терминолога (D39.45) — «бюджет-гейт режет хвост батча»
|
||||
|
||||
feed_cap НЕ построен: grep feed_cap/FeedCap по backend/ = 0 (подтверждено и независимой ревью-шапкой docs/archive/reports/PACK20_BANK_BUILD_2026-07-26.md:14 «feed_cap действительно не построен (grep=0)»). Претензия строки к текущему механизму ВЕРНА и проверена кодом: бюджет проверяется ПЕРЕД каждым вызовом батча и при превышении остальные батчи остаются неконсолидированными status:auto (pipeline/terminologist.go:256-264), при этом кандидаты сортированы ЛЕКСИКОГРАФИЧЕСКИ по src (terminologist.go:191; terminology.go:212), а Batch сохраняет этот порядок (terminology.go:917-919) — т.е. гейт режет лексикографический хвост, не наименее ценное, ровно как констатирует D39.45 (лог:1119).
|
||||
⚠ **feed_cap ПОСТРОЕН И ЗАКРЫТ ратифицированной D39.69 §1 (испр. 02.09): value-порядок отреза бюджета живёт в `backend/internal/terminology/terminology.go` (греп `feed_cap`), гвоздь — `TestBatchValueOrder` в `series_test.go`. Прежний греп искал не там.** Историческая запись 26.07: feed_cap НЕ построен, grep feed_cap/FeedCap по backend/ = 0 (подтверждено и независимой ревью-шапкой docs/archive/reports/PACK20_BANK_BUILD_2026-07-26.md:14 «feed_cap действительно не построен (grep=0)»). Претензия строки к текущему механизму ВЕРНА и проверена кодом: бюджет проверяется ПЕРЕД каждым вызовом батча и при превышении остальные батчи остаются неконсолидированными status:auto (pipeline/terminologist.go:256-264), при этом кандидаты сортированы ЛЕКСИКОГРАФИЧЕСКИ по src (terminologist.go:191; terminology.go:212), а Batch сохраняет этот порядок (terminology.go:917-919) — т.е. гейт режет лексикографический хвост, не наименее ценное, ровно как констатирует D39.45 (лог:1119).
|
||||
|
||||
**Фикс/скоуп:** Занесено правильно (строка 86 + кандидат в 73); формулировка точна.
|
||||
|
||||
**Сводка среза:** Срез 80/82/84 + кандидаты 73/feed_cap: 6 CONFIRMED_LOST, 1 RESCOPE, 0 ALREADY_BUILT/CLOSED целиком. Строки 80 (резюме-слой: memoryVersion материализует только approved-глоссарий, snapshot.go:179-189; отложено Ф2, лог:373), 82 (морфо-гейт рода: ноль gender-хитов в checks/, sanitizer.go:83/429 явно оставляет морфологию Ф2) и 84 (neuter отсутствует в enum memory.go:815-823 и в инъекционных текстах embedded.go:395-397; `gender: neuter` в сиде — тихий no-op без линта) занесены правильно. Единственное опровержение — кандидат «ranked-set инъективность рангов»: инъективность dst УЖЕ ПОСТРОЕНА (membank.InjectivityCollisions memory.go:1101-1126, warning-only на seeding.go:64) — RESCOPE на «тип ranked-set + порядок ступеней». По tmctl-замене субстрат построен (окна since/until в схеме + $0-пере-пин repin.go) — не хватает только тонкой CLI-команды. feed_cap: не построен (grep=0), и претензия «гейт режет хвост, не наименее ценное» подтверждена кодом — батчи в лексикографическом порядке src, бюджет-стоп до вызова (terminologist.go:256-264).
|
||||
**Сводка среза:** Срез 80/82/84 + кандидаты 73/feed_cap: 6 CONFIRMED_LOST, 1 RESCOPE, 0 ALREADY_BUILT/CLOSED целиком. Строки 80 (резюме-слой: memoryVersion материализует только approved-глоссарий, snapshot.go:179-189; отложено Ф2, лог:373), 82 (морфо-гейт рода: ноль gender-хитов в checks/, sanitizer.go:83/429 явно оставляет морфологию Ф2) и 84 ⚠ **(ПРОТУХЛО — см. тело пункта выше: D39.69 §3 закрыл строки 27/84, neuter работает end-to-end. Эта сводка — снимок 26.07 и НЕ переписывается, но читать её как живой статус нельзя.)** Историческая запись: neuter отсутствует в enum и в инъекционных текстах; `gender: neuter` в сиде — тихий no-op без линта) занесены правильно. Единственное опровержение — кандидат «ranked-set инъективность рангов»: инъективность dst УЖЕ ПОСТРОЕНА (membank.InjectivityCollisions memory.go:1101-1126, warning-only на seeding.go:64) — RESCOPE на «тип ranked-set + порядок ступеней». По tmctl-замене субстрат построен (окна since/until в схеме + $0-пере-пин repin.go) — не хватает только тонкой CLI-команды. feed_cap: не построен (grep=0), и претензия «гейт режет хвост, не наименее ценное» подтверждена кодом — батчи в лексикографическом порядке src, бюджет-стоп до вызова (terminologist.go:256-264).
|
||||
|
||||
## Срез: строка 25 — дефекты чекеров
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ backend/internal/checks/checkers.go:514 — `const minLatinResidueLen = 3` —
|
|||
|
||||
### [CONFIRMED_LOST] #10 пост-чек банка: «src сработал» = подстрочное вхождение, однознаковый 转 даёт ложные
|
||||
|
||||
membank/mempostcheck.go:12 — пост-чек стоит на посылке «SRC actually fired in THIS chunk»; «сработал» = Aho-Corasick ПОДСТРОКА (memory.go:532). Han-ключи намеренно НЕ проверяются на границы: memory.go:1071-1072 «KANA and HAN are deliberately NOT boundary-checked» (якорь уехал 1048→1071 после банк-пака). Односимвольный 转 попадает в автомат через allow_short (memory.go:152-154) и обходит и мин-длину, и понижение до Ambiguous: collisionProneKey ложен для Han (memory.go:88-90 `!runesAnyHan`), а allowShort гасит ветку (memory.go:653-654 `dispositionFor`). Итог: 转 внутри 转身/旋转 фиксирует «src сработал» → Confirmed-miss пост-чека. 转 живой в холодном банке: COLDRUN_REPORT_2026-07-31.md:143 «转 пришло само (freq 62, „ранг“)».
|
||||
membank/mempostcheck.go:12 — пост-чек стоит на посылке «SRC actually fired in THIS chunk»; «сработал» = Aho-Corasick ПОДСТРОКА (`backend/internal/membank/memory.go`, греп `Aho`) ⚠ (гвоздь НЕ строить — механизм на месте; цель `run.texts[i] = att.text` живёт в `terminologist.go`, греп по этой строке). Han-ключи намеренно НЕ проверяются на границы: memory.go:1071-1072 «KANA and HAN are deliberately NOT boundary-checked» (якорь уехал 1048→1071 после банк-пака). Односимвольный 转 попадает в автомат через allow_short (memory.go:152-154) и обходит и мин-длину, и понижение до Ambiguous: collisionProneKey ложен для Han (memory.go:88-90 `!runesAnyHan`), а allowShort гасит ветку (memory.go:653-654 `dispositionFor`). Итог: 转 внутри 转身/旋转 фиксирует «src сработал» → Confirmed-miss пост-чека. 转 живой в холодном банке: COLDRUN_REPORT_2026-07-31.md:143 «转 пришло само (freq 62, „ранг“)».
|
||||
|
||||
**Фикс/скоуп:** Дизамбигуация коротких Han-ключей: пер-вхождение с контекстной проверкой (не считать Confirmed-miss без границы/контекста); стыкуется с B6-токенизатором и аркой банка (строка 73). — **✅ ИСПОЛНЕНО пакетом-чекеров 02.08** ([reports/CHECKER_PACKAGE_2026-08-02.md](../archive/reports/CHECKER_PACKAGE_2026-08-02.md); D39.78): `mempostcheck.go` `singleHanKeyFired(p.Via)` — одно-руновый Han-ключ роутит dst-absent-миссы в Unverified observability, не Confirmed (мульти-руновые Han НЕ демотируются). Замер labels: K6 fp 14→6, precision 0.067→0.143, **fn=0 сохранён** (все 6 демотированных = 转 внутри глаголов; ни одного реального промаха не потеряно; ⚠ fn=0 КЛАСС-ВАКУУМЕН — в labels ноль одно-Han-позитивов, recall-цена демоции не измерена, hard-gate строки 12 на него не опираться — D39.78). Демотированный мисс несёт `PostcheckMiss.Demoted` в detail (постфикс §8). Гвозди `mempostcheck_test.go` (вкл. негатив: одно-руновый НЕ-Han остаётся Confirmed). Стеммер-путь `declinedFormPresent` (банк-пак §3) НЕ тронут. Остаточные 6 K6-fp (元石/蛊虫 плюральные формы) = сид-полнота, не код.
|
||||
|
||||
|
|
@ -177,7 +177,7 @@ backend/prompts/zh-ru/editor.md:6 — «Правь стиль: убирай ка
|
|||
|
||||
### [CONFIRMED_LOST] (3) lintNumberMagnitude без гейта по письму источника (дописка 79): активен по цель-данным, SourceScripts не читает
|
||||
|
||||
Гейта по письму источника нет. backend/internal/checks/cheapgates.go:414-416: единственный гейт — `if c == nil || len(c.magnitudeStem) == 0` — это ЦЕЛЬ-данные (checkers.go:51 «target-general: ru magnitude word stem», checkers.go:159 — из пар-конфига `magnitude_stem`). grep sourceScripts/SourceScripts по cheapgates.go — 0 вхождений: механизм SetSourceScripts существует (checkers.go:104-125) и используется другими путями, но lintNumberMagnitude его НЕ читает. Источник-сторона захардкожена: cjkMagnitudeOrders (cheapgates.go:464-466) ищет CJK-маркеры 万/萬/億/亿/兆 безусловно. На ja-книге чекер активен без гейта (случайно корректен — маркеры общие с ja); на не-CJK источнике инертен лишь по контенту, семантика источника остаётся захардкоженной в общем слое — находка §8 карты D39.60 актуальна.
|
||||
⚠ **ГЕЙТ ПО ПИСЬМУ ИСТОЧНИКА ПОСТРОЕН (испр. 02.09): он внутри `lintNumberMagnitude` — `backend/internal/checks/cheapgates.go`, греп `SOURCE-script gate`, комментарий называет заказ по имени («строка 79, D39.39»). Прежний греп объявлял ноль, потому что искал в `backend/internal/pipeline/`, где файла нет. Остаток строки 79 (`cjkScriptNames`) не тронут.** Историческая запись: гейта по письму источника нет, cheapgates.go:414-416: единственный гейт — `if c == nil || len(c.magnitudeStem) == 0` — это ЦЕЛЬ-данные (checkers.go:51 «target-general: ru magnitude word stem», checkers.go:159 — из пар-конфига `magnitude_stem`). grep sourceScripts/SourceScripts по cheapgates.go — 0 вхождений: механизм SetSourceScripts существует (checkers.go:104-125) и используется другими путями, но lintNumberMagnitude его НЕ читает. Источник-сторона захардкожена: cjkMagnitudeOrders (cheapgates.go:464-466) ищет CJK-маркеры 万/萬/億/亿/兆 безусловно. На ja-книге чекер активен без гейта (случайно корректен — маркеры общие с ja); на не-CJK источнике инертен лишь по контенту, семантика источника остаётся захардкоженной в общем слое — находка §8 карты D39.60 актуальна.
|
||||
|
||||
**Фикс/скоуп:** Не требуется — дописка 79 точна («гейтить по объявленному письму источника», кандидат при ближайшем касании чекеров).
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue