Convert the tech-debt anchors to token form, note the moved targets in the frozen report and the consilium result, and record the refusal-sentinel divergence

This commit is contained in:
heaven 2026-09-16 17:48:32 +03:00
parent 2623ecb9cb
commit 1f0adc4aab
4 changed files with 50 additions and 9 deletions

View file

@ -3,7 +3,7 @@
> **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и D-ноты ссылаются словами «строка N» / «строка бэклога N»: **ID строки стабилен навсегда**, не перенумеровывается и не переиспользуется (D39.80). Правки — только через оркестратора; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено. > **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и D-ноты ссылаются словами «строка N» / «строка бэклога N»: **ID строки стабилен навсегда**, не перенумеровывается и не переиспользуется (D39.80). Правки — только через оркестратора; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено.
> ⚠ **Это НЕ бэклог зоны `docs/`, а бэклог ПРОЕКТА.** У зон свои, с другими неймспейсами ID, и единый их строк не принимает (D39.84): платформа — [../platform/BACKLOG.md](../platform/BACKLOG.md) (`П-N`) и её регистр дефектов `platform/docs/DEFECT_REGISTER.md` (`PD-N`); фронт — [../frontend/docs/BACKLOG.md](../frontend/docs/BACKLOG.md) (`Ф-N`). > ⚠ **Это НЕ бэклог зоны `docs/`, а бэклог ПРОЕКТА.** У зон свои, с другими неймспейсами ID, и единый их строк не принимает (D39.84): платформа — [../platform/BACKLOG.md](../platform/BACKLOG.md) (`П-N`) и её регистр дефектов `platform/docs/DEFECT_REGISTER.md` (`PD-N`); фронт — [../frontend/docs/BACKLOG.md](../frontend/docs/BACKLOG.md) (`Ф-N`).
> ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции. > ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции.
> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **339** строк · зона бэкенд **173** строго / **225** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **175** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **340** строк · зона бэкенд **174** строго / **226** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **176** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - ⚠ **Переезд 06.09 (D39.218):** таблица вынесена из `PROGRESS.md` ДОСЛОВНО и ни один ID не сдвинут — **с единственным исключением: две ячейки (строки 220 и 306) тронуты РОВНО в номере якоря `docs/scripts/counts.py:566`→`:569` и `:592`→`:595`**, потому что цель сдвинул этот же коммит; текст ячеек не менялся, длины равны. В `PROGRESS.md` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп. > - ⚠ **Переезд 06.09 (D39.218):** таблица вынесена из `PROGRESS.md` ДОСЛОВНО и ни один ID не сдвинут — **с единственным исключением: две ячейки (строки 220 и 306) тронуты РОВНО в номере якоря `docs/scripts/counts.py:566`→`:569` и `:592`→`:595`**, потому что цель сдвинул этот же коммит; текст ячеек не менялся, длины равны. В `PROGRESS.md` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп.
## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
@ -375,3 +375,4 @@
| 456 | **Пин читательской фразы отчитывается за КЛАСС, а меряет СРЕЗ.** `backend/internal/pipeline/readerholewords_test.go:47-64`=`DroppedReason: string(FlagHardRefusal)`: строки таблицы варьируют причину флага (`retry_unaffordable`, `cancelled`, `hard_refusal`, `sanitizer_defect`), но `DroppedReason` захардкожен `FlagHardRefusal` во ВСЕХ строках. Поэтому строка «a stop mark over a unit that lost a member for good» меряет защитимый случай — член потерян настоящим отказом — и молчит ровно о случае ряда 375, где выпавший член САМ есть метка стопа. Прогон: 5/5 PASS, то есть зелень ничего не говорит о предмете | бэкенд | скоро | варьировать `DroppedReason` по строкам | `D39.255`, приёмка пака 291 | | 456 | **Пин читательской фразы отчитывается за КЛАСС, а меряет СРЕЗ.** `backend/internal/pipeline/readerholewords_test.go:47-64`=`DroppedReason: string(FlagHardRefusal)`: строки таблицы варьируют причину флага (`retry_unaffordable`, `cancelled`, `hard_refusal`, `sanitizer_defect`), но `DroppedReason` захардкожен `FlagHardRefusal` во ВСЕХ строках. Поэтому строка «a stop mark over a unit that lost a member for good» меряет защитимый случай — член потерян настоящим отказом — и молчит ровно о случае ряда 375, где выпавший член САМ есть метка стопа. Прогон: 5/5 PASS, то есть зелень ничего не говорит о предмете | бэкенд | скоро | варьировать `DroppedReason` по строкам | `D39.255`, приёмка пака 291 |
| 457 | **ТРИ ПРОТУХШИХ ЯКОРЯ В ДОКАХ ФРОНТ-ЗОНЫ, и две цели живы по известным адресам.** `frontend/docs/frontend-PROGRESS.md:187`=`Какое слово о состоянии книги стоит в дереве` целит в контракт по адресу 1054 — токен живёт на `docs/architecture/14-api-contract/README.md:1138`=`не различает две беды`; `frontend/docs/frontend-PROGRESS.md:190`=`Фразы отказа книги` целит в openapi по адресу 1606 — enum отказов живёт на `docs/architecture/14-api-contract/openapi.yaml:1633`=`enum: [source_unreadable, not_configured, processing_failed, content_refused]`; `frontend/docs/STACK_DECISIONS.md:263`=`pend.Source = u.sourceText()` целит в экспорт по адресу 176 — присваивание живёт на `backend/internal/pipeline/export.go:178`=`pend.Source = u.sourceText()` (замер 16.09: `sourceText()` в файле два, второе — `ce.Source` на 344, и оно про другое). ⛔ **Мёртвые адреса здесь НАЗВАНЫ СЛОВАМИ, а не якорями, и это существенно:** выписав их в форме `` `путь:строка`=`токен` ``, я воспроизвёл чужую поломку у себя — линтер прочитал их как МОИ живые якоря и дал три новых красных (8 → 11). **Документируя протухший якорь, не пиши его якорем.** ⚠ Правит их ФРОНТ: доки чужой зоны оркестратор не переписывает, а обе уехавшие цели — В МОЕЙ зоне, поэтому адреса названы здесь готовыми. ⛔ Замер 16.09: цели контракта БАЙТ-ИДЕНТИЧНЫ дереву и HEAD (README 1608 строк в обеих, `openapi.yaml` 3497 в обеих) ⇒ якоря протухли НЕ лендингом приёмки, а раньше. ⚠ И они едва не уехали в находку: контрольный прогон на HEAD показал 25 строк из 27 — линтер капит список, и «эти два якоря новые» было артефактом прибора, снятым замером | фронт | когда-нибудь | три якоря зелёные в `python3 docs/scripts/counts.py --lint` | приёмка пака «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» 16.09 (`D39.255`) | | 457 | **ТРИ ПРОТУХШИХ ЯКОРЯ В ДОКАХ ФРОНТ-ЗОНЫ, и две цели живы по известным адресам.** `frontend/docs/frontend-PROGRESS.md:187`=`Какое слово о состоянии книги стоит в дереве` целит в контракт по адресу 1054 — токен живёт на `docs/architecture/14-api-contract/README.md:1138`=`не различает две беды`; `frontend/docs/frontend-PROGRESS.md:190`=`Фразы отказа книги` целит в openapi по адресу 1606 — enum отказов живёт на `docs/architecture/14-api-contract/openapi.yaml:1633`=`enum: [source_unreadable, not_configured, processing_failed, content_refused]`; `frontend/docs/STACK_DECISIONS.md:263`=`pend.Source = u.sourceText()` целит в экспорт по адресу 176 — присваивание живёт на `backend/internal/pipeline/export.go:178`=`pend.Source = u.sourceText()` (замер 16.09: `sourceText()` в файле два, второе — `ce.Source` на 344, и оно про другое). ⛔ **Мёртвые адреса здесь НАЗВАНЫ СЛОВАМИ, а не якорями, и это существенно:** выписав их в форме `` `путь:строка`=`токен` ``, я воспроизвёл чужую поломку у себя — линтер прочитал их как МОИ живые якоря и дал три новых красных (8 → 11). **Документируя протухший якорь, не пиши его якорем.** ⚠ Правит их ФРОНТ: доки чужой зоны оркестратор не переписывает, а обе уехавшие цели — В МОЕЙ зоне, поэтому адреса названы здесь готовыми. ⛔ Замер 16.09: цели контракта БАЙТ-ИДЕНТИЧНЫ дереву и HEAD (README 1608 строк в обеих, `openapi.yaml` 3497 в обеих) ⇒ якоря протухли НЕ лендингом приёмки, а раньше. ⚠ И они едва не уехали в находку: контрольный прогон на HEAD показал 25 строк из 27 — линтер капит список, и «эти два якоря новые» было артефактом прибора, снятым замером | фронт | когда-нибудь | три якоря зелёные в `python3 docs/scripts/counts.py --lint` | приёмка пака «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» 16.09 (`D39.255`) |
| 458 | **ПЯТНАДЦАТЬ ГОЛЫХ ЯКОРЕЙ В ЖИВЫХ СТРОКАХ: путь и номер есть, ТОКЕНА ОЖИДАНИЯ нет — линтер такой якорь не читает, и «ноль жалоб» тут неотличимо от «не разобран».** Одиннадцать в `docs/BACKLOG.md` — pipeline/export.go 307 · stagerun.go 93 · seed/seed.go 24 · store/chunkstatus.go 92 · bankmaterialize.go 214 и 295 · export.go 174 и 320322 · quality.go 492 · status.go 538543 · voicerun.go 46 (⚠ у восьми нет и КОРНЯ пути, а такой якорь не ловится даже существованием файла); четыре в `docs/experiments/00-provider-quirks.md` — pipeline-c1.yaml 129 · pipeline-arm-glm.yaml 61 · pipeline-arm-deepseek-pro.yaml 62 · pipeline-arm-mistral.yaml 61. ⛔ **Адреса здесь намеренно НЕ в форме якоря:** выписав их якорями, я за одну смену ДВАЖДЫ завёл своими руками ровно тот дефект, который ряд описывает — сперва в ряду 457 с чужими протухшими целями, потом здесь, и оба раза поймал ХУК, а не я. **Перечень поломанных якорей сам якорями не пишется.****Чинить ОПТОМ нельзя:** токен, подобранный под то, что в цели ОКАЗАЛОСЬ, есть подгонка под зелень (`D39.121`) — каждый разбирается чтением прозы, которая его описывает, и половина таких разборов кончается тем, что уехала ЦЕЛЬ, а не номер. Замер 16.09 (`D39.255` п.10): пред-существуют — лендинг приёмки эти строки лишь дополнял, а ввёл он двенадцать своих, и они закрыты в тот же заход | оркестратор | когда-нибудь | у каждого якоря есть корень пути и токен; пред-коммитный хук на этих строках молчит | приёмка пака «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» 16.09 (`D39.255`) | | 458 | **ПЯТНАДЦАТЬ ГОЛЫХ ЯКОРЕЙ В ЖИВЫХ СТРОКАХ: путь и номер есть, ТОКЕНА ОЖИДАНИЯ нет — линтер такой якорь не читает, и «ноль жалоб» тут неотличимо от «не разобран».** Одиннадцать в `docs/BACKLOG.md` — pipeline/export.go 307 · stagerun.go 93 · seed/seed.go 24 · store/chunkstatus.go 92 · bankmaterialize.go 214 и 295 · export.go 174 и 320322 · quality.go 492 · status.go 538543 · voicerun.go 46 (⚠ у восьми нет и КОРНЯ пути, а такой якорь не ловится даже существованием файла); четыре в `docs/experiments/00-provider-quirks.md` — pipeline-c1.yaml 129 · pipeline-arm-glm.yaml 61 · pipeline-arm-deepseek-pro.yaml 62 · pipeline-arm-mistral.yaml 61. ⛔ **Адреса здесь намеренно НЕ в форме якоря:** выписав их якорями, я за одну смену ДВАЖДЫ завёл своими руками ровно тот дефект, который ряд описывает — сперва в ряду 457 с чужими протухшими целями, потом здесь, и оба раза поймал ХУК, а не я. **Перечень поломанных якорей сам якорями не пишется.****Чинить ОПТОМ нельзя:** токен, подобранный под то, что в цели ОКАЗАЛОСЬ, есть подгонка под зелень (`D39.121`) — каждый разбирается чтением прозы, которая его описывает, и половина таких разборов кончается тем, что уехала ЦЕЛЬ, а не номер. Замер 16.09 (`D39.255` п.10): пред-существуют — лендинг приёмки эти строки лишь дополнял, а ввёл он двенадцать своих, и они закрыты в тот же заход | оркестратор | когда-нибудь | у каждого якоря есть корень пути и токен; пред-коммитный хук на этих строках молчит | приёмка пака «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» 16.09 (`D39.255`) |
| 459 | **РАТИФИЦИРОВАННАЯ НОТА И ДЕРЕВО РАСХОДЯТСЯ ПО ОТКАЗ-СИГНАЛУ ⟦TM-NO-DST⟧, и банковый пак упрётся в это на первой же строке.** `D39.102` п.2 числит отказ-сигнал в корзине «закрыть по нужности», ратифицированной ЦЕЛИКОМ; п.3 той же ноты добавляет его в «опровергнуто/не заводится»: «NoDst-почти-сентинел на zh-ru (target_script обязателен конфигом, OffLanguage отбивает)». ⛔ **В ДЕРЕВЕ он жив и стоит на БОЕВОМ проводе zh-ru:** `backend/prompts/zh-ru/terminologist.md:36`=`не можешь выбрать перевод уверенно` велит роли вернуть сентинел и называет это нормальным исходом; парсер ждёт его вместе с искажёнными формами (`backend/internal/terminology/terminology.go:694`=`const NoDst = "⟦TM-NO-DST⟧"`, `backend/internal/terminology/terminology.go:1183`=`func isNoDst`); счёт печатается прогоном (`backend/internal/pipeline/terminologist.go:621`=`"declined", res.Declined`). Итог консилиума повторил НОТУ, а не дерево (`docs/research/35-bank-memory-consilium.md` §П3, «исхода движка „это не термин“ нет и не вводится»). ⇒ пак обязан выбрать ЯВНО: сентинел остаётся законным исходом (тогда ряд 445 — ужесточение разбора ответа) либо снимается из промта — а это двигает хеш запроса и перекупает проход на консолидированных книгах. Найдено советчиком-фаблом, проверено деревом оркестратором | бэкенд | скоро | нота и дерево говорят одно, выбор назван нотой | совет фабла 16.09 + сверка дерева оркестратором |

File diff suppressed because one or more lines are too long

View file

@ -8451,3 +8451,20 @@ sd(log R̂(low₂) log R̂(low₁)) = 1.493 по n=19 ⇒ σ = 1.493/√
токенов. Но для ЛЮБОГО замера, который судит ТЕКСТ, это предупреждение первого порядка: там шум токенов. Но для ЛЮБОГО замера, который судит ТЕКСТ, это предупреждение первого порядка: там шум
розыгрыша крупнее межрукового различия, и без активного нуля такой замер награждал бы шум. Наша розыгрыша крупнее межрукового различия, и без активного нуля такой замер награждал бы шум. Наша
проба защищена парным дизайном по 20 юнитам — и, теперь, прямой репликацией. проба защищена парным дизайном по 20 юнитам — и, теперь, прямой репликацией.
---
## ⚠ ПОМЕТКА 16.09 (оркестратор №23) — поправка к якорям тела и к одной его претензии
Тело улики не правится (D23.3), поэтому поправка живёт здесь. **В конце файла намеренно:** вставка в шапку
сдвинула бы номера строк, а в этот отчёт целятся 23 якоря из других доков, и 21 из них БЕЗ токена —
такой сдвиг испортил бы их молча, потому что голый якорь линтер не читает.
**Два адреса тела уехали:** «system_messages: single» живёт на `backend/configs/models.yaml:183`=`system_messages: single`,
`toOpenAIMessages` — на `backend/internal/llm/httpllm.go:766`=`func toOpenAIMessages` (в теле стоят 137 и 528).
⛔ **И существеннее адресов: претензия тела «носитель решения врёт прямо сейчас» (про арм-конфиги) ЗАКРЫТА — носители ИСПРАВЛЕНЫ.**
Обоснования «×2 дешевле glm» в дереве больше нет ни в одном из двух файлов; на его месте пере-пин цен `D39.137` п.4:
`backend/configs/pipeline-c1.yaml:97`=`ПЕРЕВЁРНУТА пере-пином цен` и `backend/configs/pipeline-arm-glm.yaml:6`=`ПЕРЕВЁРНУТА пере-пином цен`
— «в ПИК dspro дороже glm ×1.26, офф-пик дешевле ×1.59». Контроль: «дешевле» встречается в каждом файле РОВНО ОДИН раз,
и оба раза — про пере-пин; «×2» — ноль вхождений в обоих. ⇒ читающий тело НЕ должен заводить по этой претензии работу.

View file

@ -1622,3 +1622,26 @@ D39.50 (просьба владельца против «до него kwic не
починка предыдущего. Это не значит, что решение негодно: его несущая часть проверена исполнением трижды, а найденное починка предыдущего. Это не значит, что решение негодно: его несущая часть проверена исполнением трижды, а найденное
внесено. Это значит, что **правки последнего круга уже никем не судились**, и честно назвать их незакрытыми (О-1), внесено. Это значит, что **правки последнего круга уже никем не судились**, и честно назвать их незакрытыми (О-1),
а не выдать за проверенные. а не выдать за проверенные.
---
## ⚠ ПОМЕТКА 16.09 (оркестратор №23) — поправка к §П3 «Исходы решения»
**В конце файла намеренно:** тело итога — улика (D23.3) и не правится, а вставка выше сдвинула бы номера строк и молча
испортила бы якоря, которые целятся в этот отчёт.
§П3 утверждает: «Исхода движка „это не термин“ нет и не вводится. Класс отказ-сигналов закрыт D39.102 п.2». **Это верно
про НОТУ и неверно про ДЕРЕВО.** В боевом проводе zh-ru отказ-сигнал жив и приглашается самим промтом:
`backend/prompts/zh-ru/terminologist.md:36`=`не можешь выбрать перевод уверенно` («верни ⟦TM-NO-DST⟧… это нормальный»),
парсер ждёт его вместе с искажёнными формами (`backend/internal/terminology/terminology.go:694`=`const NoDst = "⟦TM-NO-DST⟧"`,
`backend/internal/terminology/terminology.go:1183`=`func isNoDst`), а счёт печатается прогоном
(`backend/internal/pipeline/terminologist.go:621`=`"declined", res.Declined`).
⚠ Различение, без которого поправка читается грубее, чем есть: §П3 прав в том, что у СТРОКИ БАНКА нет исхода «не термин» —
отказ роли не становится решением, а превращается в передачу черновика (это сам отчёт и говорит абзацем ниже). Неверно
другое — что класса отказ-сигналов в движке нет. Он есть, оплачен и течёт на провод.
⇒ Работа заведена строкой бэклога: пак обязан выбрать явно — сентинел остаётся законным исходом (тогда ряд 445 есть
ужесточение разбора ответа) либо снимается из промта, что двигает хеш запроса и перекупает проход. Нашёл советчик-фабл,
проверено деревом оркестратором.