Turn the 130 verified staleness findings into a batched cleanup plan with its evidence registry, and caveat the mStyleDistance average where a reader meets it first
This commit is contained in:
parent
162ab9b24d
commit
611e07595f
4 changed files with 2970 additions and 2 deletions
380
docs/DOC_CLEANUP_PLAN.md
Normal file
380
docs/DOC_CLEANUP_PLAN.md
Normal file
|
|
@ -0,0 +1,380 @@
|
|||
# ПЛАН РАЗБОРА ТЕХДОЛГА ДОКУМЕНТАЦИИ — заказ владельца 01.09.2026
|
||||
|
||||
> **⚠ ВРЕМЕННЫЙ РАБОЧИЙ ДОКУМЕНТ.** Живёт, пока идёт разбор; по закрытию последнего батча
|
||||
> уезжает в `archive/` вместе с реестром находок. Держать его в живых доках после закрытия —
|
||||
> значит сделать ровно то, против чего заказан сам разбор.
|
||||
>
|
||||
> **Заказ владельца дословно:** свести находки в план и идти по нему · привести документацию
|
||||
> в хороший порядок · **с бэклогом ПООСТОРОЖНЕЕ** · спилить лишнее, актуализировать ·
|
||||
> **старое и откровенно лишнее выкинуть, актуальное оставить и НЕ ПОТЕРЯТЬ** · старые решения
|
||||
> и мусор спиливать, чтобы не забивать контекст сессиям · **касается и фронтовой, и
|
||||
> платформенной, и бэкенд-документации** (прямая санкция на чужие зоны, выданная 01.09).
|
||||
>
|
||||
> **Контроль исполнения — отдельный агент модели Fable 5** (решение владельца 01.09): после
|
||||
> КАЖДОГО коммита я предъявляю ему коммит, он сверяется с реестром находок и выносит, верно ли
|
||||
> закрыто. Пинг-понг идёт, пока обе стороны не скажут «техдолг закрыт». Мой самоотчёт
|
||||
> закрытием НЕ считается.
|
||||
|
||||
## Источники
|
||||
|
||||
- **Реестр находок** — [`DOC_REVISION_FINDINGS.md`](DOC_REVISION_FINDINGS.md): 130 живых находок
|
||||
с уликами (команда + вывод), по одной секции `N001`…`N130`.
|
||||
- **Снятые опровергателем** — [`DOC_REVISION_REFUTED.md`](DOC_REVISION_REFUTED.md): 7 находок,
|
||||
которые адверсариальный проход ОПРОВЕРГ. ⚠ Их чинить НЕЛЬЗЯ: «починка» вернёт дефект.
|
||||
|
||||
## Как добыты находки (чтобы вес был понятен)
|
||||
|
||||
Воркфлоу `docs-staleness-revision-A`, 15 срезов × (ревизор + опровергатель), 30 агентов, 0 отказов,
|
||||
1689 вызовов инструментов. **1432 утверждения проверены ИСПОЛНЕНИЕМ**, 115 положительных контролей
|
||||
(норма: отрицательный результат предъявляется вместе с доказательством, что инструмент в этой
|
||||
области способен хоть что-то найти). Найдено 137 → адверсариальный пере-суд снял 7 → **осталось 130**.
|
||||
|
||||
⚠ **Вес находки не одинаков.** 82 разрушающие и блокерные прошли пере-суд (75 ПОДТВЕРЖДЕНО).
|
||||
Остальные проверены ОДНИМ агентом — они наряд на перепроверку, а не истина: исполнять их на
|
||||
доверии запрещено, каждую верифицирую своей командой перед правкой.
|
||||
|
||||
## Дисциплина разбора (жёсткая, из заказа владельца)
|
||||
|
||||
1. **Не потерять.** Прежде чем удалить абзац/строку/док — грепнуть его отличительный токен по
|
||||
всему дереву и назвать, куда уехало содержимое. Удаление без адреса = потеря.
|
||||
2. **Бэклог — осторожно.** Строку закрываем ТОЛЬКО когда лекарство предъявлено в коде своей
|
||||
командой. ID строк стабильны навсегда и на них ссылаются доки — закрытая строка уезжает в
|
||||
D-ноту с номером решения, а не стирается молча.
|
||||
3. **Чужие зоны.** Санкция владельца выдана на ДОКУМЕНТАЦИЮ. Код чужих зон не трогаю.
|
||||
Каждая правка чужого дока объявляется в зонном журнале, чтобы зона увидела.
|
||||
4. **Гейты перед каждым коммитом:** `counts.py --check` и `--lint`, `git status` на чужое,
|
||||
коммит только явным списком путей.
|
||||
5. **Соседний worktree `/home/ubuntu/projects/textmachine` — НЕ ТРОГАТЬ** (указание владельца
|
||||
01.09): ни чтением, ни записью, ни git-командой. Каталог `books/` — симлинк туда же.
|
||||
|
||||
## Батчи
|
||||
|
||||
Порядок — по убыванию цены ошибки. Каждый батч = один коммит = одна сверка контролёра.
|
||||
|
||||
| Батч | Предмет | Находок | бл / maj / min | Статус |
|
||||
|---|---|---|---|---|
|
||||
| **Б1** | Блокеры бэклога: строки, закрытые кодом, но открытые в таблице | 3 | 3 / 0 / 0 | ⬜ не начат |
|
||||
| **Б2** | Денежный путь `15-money-path.md` | 7 | 2 / 3 / 2 | ⬜ не начат |
|
||||
| **Б3** | Шапка журнала и остальной PROGRESS | 17 | 0 / 9 / 8 | ⬜ не начат |
|
||||
| **Б4** | Контракт API 14 (README + openapi) | 10 | 0 / 5 / 5 | ⬜ не начат |
|
||||
| **Б5** | Реестр загейченных триггеров 13 | 8 | 0 / 5 / 3 | ⬜ не начат |
|
||||
| **Б6** | Шов и эмиттер: 16, 17 | 11 | 0 / 8 / 3 | ⬜ не начат |
|
||||
| **Б7** | Движковые арх-доки: 03, 09, 10, 12 | 17 | 0 / 5 / 12 | ⬜ не начат |
|
||||
| **Б8** | Корневые и онбординг: CLAUDE.md, README, STACK, glossary, product-requirements | 17 | 0 / 6 / 11 | ⬜ не начат |
|
||||
| **Б9** | Ранние арх-доки 01/04/06 — баннеры или архив | 6 | 0 / 1 / 5 | ⬜ не начат |
|
||||
| **Б10** | ЧУЖАЯ ЗОНА (санкция владельца 01.09): бэкенд-доки | 10 | 0 / 6 / 4 | ⬜ не начат |
|
||||
| **Б11** | ЧУЖАЯ ЗОНА (санкция владельца 01.09): фронт-доки | 16 | 0 / 9 / 7 | ⬜ не начат |
|
||||
| **Б12** | ЧУЖАЯ ЗОНА (санкция владельца 01.09): платформенные доки | 8 | 1 / 4 / 3 | ⬜ не начат |
|
||||
|
||||
### Состав батчей поимённо
|
||||
|
||||
|
||||
**Б1 — Блокеры бэклога: строки, закрытые кодом, но открытые в таблице**
|
||||
|
||||
- `N001` блокер · `docs/PROGRESS.md:176` · C-исполненное-как-открытое — Строка 194 ЗАКРЫТА лендингом 31.08 (`bb541a8`, экземпляр A10 закона раскрытия): `projectBookUSD(...) + r.bankRoleCommittedUSD()` уже стоит в `status.g
|
||||
|
||||
- `N002` блокер · `docs/PROGRESS.md:200` · C-исполненное-как-открытое — Строка 238 ЗАКРЫТА тем же лендингом 31.08 (`bb541a8`, экземпляр A6 «проекция видит правку исходника»). Посадка `rebillsource_test.go` называет строку
|
||||
|
||||
- `N003` блокер · `docs/PROGRESS.md:201` · C-исполненное-как-открытое — Строка 239 ЗАКРЫТА лендингом 31.08 (`bb541a8`, экземпляр A7+A12). Правило `exportConfigDrift` не «перенесено», а сведено в ОДНО общее определение `orp
|
||||
|
||||
|
||||
**Б2 — Денежный путь `15-money-path.md`**
|
||||
|
||||
- `N004` блокер · `docs/architecture/15-money-path.md:31` · D-противоречие-ратифицированному — Числа взяты из D39.165 §1 (28.08) и меряны на леджерах ДО ценового перелома. D39.179 п.1 (31.08) ратифицировал: DeepSeek пере-пинен под цены, вступивш
|
||||
|
||||
- `N005` блокер · `docs/architecture/15-money-path.md:35` · A-дрейф — Абзац описывает ТОЛЬКО живую ветвь `run abandon`. С пака P11 (PD-385, коммит e548e5a от 29.08) есть вторая ветвь — PHASE=settling: к ней отказ «юнит/б
|
||||
|
||||
- `N039` major · `docs/architecture/15-money-path.md:6` · B-мёртвый-указатель — Норму «чистый ФАЙЛ» ратифицировал D39.179 п.4, который сам говорит: «уточняет D39.177 §2в … Ось «зона» была НЕВЕРНА … Носитель нормы — шапка 15-money-
|
||||
|
||||
- `N040` major · `docs/architecture/15-money-path.md:19` · A-дрейф — Перечень движковых суб-бюджетов читается как исчерпывающий (репэйр + эскалация) и не знает третьего семейства — книго-широких бюджетов банк-ролей `gat
|
||||
|
||||
- `N041` major · `docs/architecture/15-money-path.md:21` · D-противоречие-ратифицированному — «Различение живёт в отчёте прогона и в логе» перестало быть верным 31.08. D39.181 п.2 ратифицировал закон раскрытия: «признак остановки по объёму обяз
|
||||
|
||||
- `N113` minor · `docs/architecture/15-money-path.md:6` · C-исполненное-как-открытое — Пак контракта 0.9.0 ЗАЛЕНДЖЕН 31.08 коммитом 0a680a3 (D39.180), файл в дереве чист, версия в нём — 0.9.0. Настоящее время «двигается прямо сейчас» лож
|
||||
|
||||
- `N114` minor · `docs/architecture/15-money-path.md:14` · A-дрейф — Из трёх опор канона, названных здесь, у двух в доке есть носители (телеметрия — леджер/status в §2, потолки — §2/§3), а у третьей — «явное согласие на
|
||||
|
||||
|
||||
**Б3 — Шапка журнала и остальной PROGRESS**
|
||||
|
||||
- `N013` major · `docs/PROGRESS.md:3` · A-дрейф — Канон уже НЕ 0.8.0: в `docs/architecture/14-api-contract/openapi.yaml` стоит 0.9.0 — минор уехал с лендингом P12 31.08, о котором сообщает ЭТА ЖЕ стро
|
||||
|
||||
- `N014` major · `docs/PROGRESS.md:3` · A-дрейф — Числа «73%» в цитируемом отчёте холодного прогона НЕТ вовсе. Отчёт даёт долю редактора с ДВУМЯ знаменателями: 49.3% от всего прогона ($0.214865 из $0.
|
||||
|
||||
- `N015` major · `docs/PROGRESS.md:3` · E-второй-носитель — Шапка объявляет себя ЕДИНСТВЕННЫМ носителем состояния очереди, но не несёт двух лендингов 31.08, которые несёт `docs/README.md`: бэкенд-пак «ДЕНЬГИ И
|
||||
|
||||
- `N016` major · `docs/PROGRESS.md:80` · C-исполненное-как-открытое — Довод «⇒ строка жива» опирается на прогоны coldrun-a/b, но 31.08 отработал НОВЫЙ холодный прогон (coldrun-v16), в котором редакторская волна гонялась
|
||||
|
||||
- `N017` major · `docs/PROGRESS.md:143` · A-дрейф — Гейт назначен на событие, которое УЖЕ произошло (первый холодный прогон, 31.08), и прогон показал, что назначенный замер этим путём недостижим: манифе
|
||||
|
||||
- `N018` major · `docs/PROGRESS.md:157` · A-дрейф — Файла `.bank-stop.json` больше НЕ существует: он снесён вместе с писателем и четырьмя тестами при постройке входной двери шва (D39.158) — в Go-коде дв
|
||||
|
||||
- `N019` major · `docs/PROGRESS.md:182` · D-противоречие-ратифицированному — Дважды протухла. (1) Цифра «≈$0.05» СНЯТА ратифицированной нотой D39.179 п.1 как протухшая: пере-пин DeepSeek 15.08 даёт множитель 4.47, а замер 31.08
|
||||
|
||||
- `N020` major · `docs/PROGRESS.md:196` · C-исполненное-как-открытое — Строка 232 ЗАКРЫТА лендингом 31.08 (`bb541a8`, экземпляр A11). Читающий метод `store.AnnouncedOnceKeys()` построен, его докстринг называет строку 232
|
||||
|
||||
- `N021` major · `docs/PROGRESS.md:202` · C-исполненное-как-открытое — Строка 240 исполнена лендингом P12 31.08 (`0a680a3`, D39.180) — обеими ветвями своей же диспозиции. Гард `LiftBankStop` СНЯТ (в `platform/` осталось д
|
||||
|
||||
- `N075` minor · `docs/PROGRESS.md:3` · B-мёртвый-указатель — Промт НЕ в `docs/archive/prompts/` — он до сих пор лежит в корне `docs/`. В архиве промтов лежат два ДРУГИХ холодно-прогонных промта (`BACKEND_COLDRUN
|
||||
|
||||
- `N076` minor · `docs/PROGRESS.md:3` · A-дрейф — Сегодня `main` опережает `origin/main` на 48 коммитов. Несущий вывод («развязки нет») выжил — `origin/main` остаётся ПРЕДКОМ `main`, расхождения по-пр
|
||||
|
||||
- `N077` minor · `docs/PROGRESS.md:3` · A-дрейф — «Пять» было верно до 31.08 (P8-FIX · P8-REVIEW · P9 · P10 · P11). После P7, где долг выдачи был отложен в P8, по реестру нот легло ШЕСТЬ P-нумерованны
|
||||
|
||||
- `N078` minor · `docs/PROGRESS.md:15` · C-исполненное-как-открытое — Условие, по которому число обещано пере-калибровать, ИСПОЛНИЛОСЬ: платный прогон отработал 31.08 и дал собственную оценку движка $1.1377277707 на деся
|
||||
|
||||
- `N079` minor · `docs/PROGRESS.md:146` · C-исполненное-как-открытое — Гейт пал: первый холодный прогон отработал 31.08 и выдал ровно то число, на котором строка условила решение — `families_held=0` (строка требует ослабл
|
||||
|
||||
- `N080` minor · `docs/PROGRESS.md:183` · B-мёртвый-указатель — Оба line-якоря строки 203 уехали после контрактного минора 0.9.0 (P12, `0a680a3`, 31.08). `openapi.yaml:1784-1787` сегодня показывает поля `id`/`units
|
||||
|
||||
- `N081` minor · `docs/PROGRESS.md:193` · B-мёртвый-указатель — Якорь уехал на 28 строк после контрактного минора 0.9.0 (P12, 31.08): цитируемая фраза стоит на `:2079`, а `:2051` показывает заголовок совсем другой
|
||||
|
||||
- `N082` minor · `docs/PROGRESS.md:207` · C-исполненное-как-открытое — Строка исполнена НАПОЛОВИНУ, и строка об этом не знает: 31.08 коммитом `94381bb` в `docs/scripts/githooks/pre-commit` добавлен warn-блок, который пере
|
||||
|
||||
|
||||
**Б4 — Контракт API 14 (README + openapi)**
|
||||
|
||||
- `N034` major · `docs/architecture/14-api-contract/README.md:8` · A-дрейф — Канон стоит на 0.9.0 с 31.08 (минор заленджен D39.180 вместе с паком P12), а ревью-шапка всё ещё называет базой 0.8.0. Верно: зеркало 0.2.3 против кан
|
||||
|
||||
- `N035` major · `docs/architecture/14-api-contract/README.md:981` · C-исполненное-как-открытое — Расхождение ЗАКРЫТО: `Resume` больше не отвечает 202 на исчерпанный прогон — вердикт `ceilingSpent` возвращает `ErrCeilingReached`, и `httpapi/v0.go:8
|
||||
|
||||
- `N036` major · `docs/architecture/14-api-contract/README.md:1637` · A-дрейф — Собственная команда дока, исполненная сегодня, даёт 26 хитов, а не ноль: платформа сжимает САМА, в Go, в `platform/internal/httpapi/conditional.go` (`
|
||||
|
||||
- `N037` major · `docs/architecture/14-api-contract/README.md:1718` · B-мёртвый-указатель — Вся колонка «Откуда взят (платформа)» Приложения А-2 съехала: реальные производители лежат на 240–270 строк ниже названных, а на названных номерах сто
|
||||
|
||||
- `N038` major · `docs/architecture/14-api-contract/openapi.yaml:1414` · E-второй-носитель — Деплой отвечает ТРЕМЯ значениями: `runStage` (platform/internal/pgstore/readmodel.go:576) выдаёт `re_pass` для всего пере-прохода, помимо `drafting`/`
|
||||
|
||||
- `N108` minor · `docs/architecture/14-api-contract/README.md:6` · B-мёртвый-указатель — D39.169 ратифицировала минор 0.8.0, а не 0.9.0; 0.9.0 принят и заленджен нотой D39.180 (31.08). Тело того же дока (строка 69) описывает 0.9.0 вовсе БЕ
|
||||
|
||||
- `N109` minor · `docs/architecture/14-api-contract/README.md:60` · B-мёртвый-указатель — Файла по этому пути нет: отчёт вынесен в архив коммитом 31b96d1 (27.08) и лежит как `docs/archive/reports/CONTRACT_MINOR_REPORT_2026-08-27.md`. Ссылка
|
||||
|
||||
- `N110` minor · `docs/architecture/14-api-contract/README.md:990` · C-исполненное-как-открытое — Носитель «вход P7» израсходован — пак P7 принят D39.153, и ⚠-абзац НАД самой таблицей это уже пишет («Носитель израсходован: пак P7 принят D39.153»).
|
||||
|
||||
- `N111` minor · `docs/architecture/14-api-contract/README.md:998` · B-мёртвый-указатель — Строки 148 в едином бэклоге НЕТ — её удалил `a023e39` решением владельца 21.08. Хуже: ТОТ ЖЕ документ на строке 1670 уже это знает и пишет «⚠ Прежний
|
||||
|
||||
- `N112` minor · `docs/architecture/14-api-contract/README.md:1002` · B-мёртвый-указатель — Промт вынесен в архив: живой путь — `docs/archive/prompts/BACKEND_SILENT_HARM_SESSION_PROMPT_2026-08-28.md`. Дополнительно: половина того, на что ссыл
|
||||
|
||||
|
||||
**Б5 — Реестр загейченных триггеров 13**
|
||||
|
||||
- `N029` major · `docs/architecture/13-tech-debt-anchors.md:52` · E-второй-носитель — Это ВТОРОЙ (и единственный не-баннированный) носитель статуса строки F4 реестра памяти, и он разошёлся с кодом: `tmctl backup` существует (cmd/tmctl/m
|
||||
|
||||
- `N030` major · `docs/architecture/13-tech-debt-anchors.md:72` · D-противоречие-ратифицированному — Обе половины ложны и противоречат ратифицированной D39.69 §3 («строки 27/84 ЗАКРЫТЫ … neuter end-to-end (enum · gender_neuter в injection-данных · See
|
||||
|
||||
- `N031` major · `docs/architecture/13-tech-debt-anchors.md:100` · C-исполненное-как-открытое — feed_cap ЗАКРЫТ ратифицированной нотой D39.69 §1 («value-порядок отреза бюджета (частота-desc — feed_cap ЗАКРЫТ этим, из строки 86 изъят)»), и код это
|
||||
|
||||
- `N032` major · `docs/architecture/13-tech-debt-anchors.md:134` · B-мёртвый-указатель — Единственная объявленная функция файла — быть справочником file:line-якорей («Этот файл — справочные file:line-якоря … Актуализируется лендингами пако
|
||||
|
||||
- `N033` major · `docs/architecture/13-tech-debt-anchors.md:180` · C-исполненное-как-открытое — Гейт по письму источника ПОСТРОЕН и стоит внутри самой lintNumberMagnitude; код называет заказ по имени в комментарии — «SOURCE-script gate (строка 79
|
||||
|
||||
- `N105` minor · `docs/architecture/13-tech-debt-anchors.md:12` · E-второй-носитель — Один и тот же якорь ja-препа живёт в двух живых носителях, и копии разошлись: строка 81 бэклога уже исправлена на «migrate.go:187/194», а справочник —
|
||||
|
||||
- `N106` minor · `docs/architecture/13-tech-debt-anchors.md:24` · B-мёртвый-указатель — Якоря реестра техдолга в ДВА дока моего среза сдвинулись ровно на +6 строк и не были актуализированы: коммит d2cd30c (22.08) дописал ⚠-поправки в 02-m
|
||||
|
||||
- `N107` minor · `docs/architecture/13-tech-debt-anchors.md:104` · E-второй-носитель — Факт про neuter лежит в этом файле ДВАЖДЫ, и копии разошлись ВНУТРИ одного документа: тело пункта (строки 70-72) несёт пере-сверку 23.08 «ЧЕТЫРЕ пункт
|
||||
|
||||
|
||||
**Б6 — Шов и эмиттер: 16, 17**
|
||||
|
||||
- `N042` major · `docs/architecture/16-events-emitter.md:11` · B-мёртвый-указатель — Якорь ведёт не туда И цель больше не существует: `docs/PROGRESS.md:149` — это строка бэклога 42, а строк 103 и 165 в таблице нет вовсе (закрыты D39.13
|
||||
|
||||
- `N043` major · `docs/architecture/16-events-emitter.md:17` · B-мёртвый-указатель — Три якоря §1 («что уже есть со стороны движка», раздел БЕЗ ⚠-баннера) уехали: `cmd/tmctl/main.go:67-70` — это константы полосы отказов (`refusalLast =
|
||||
|
||||
- `N044` major · `docs/architecture/16-events-emitter.md:38` · A-дрейф — Дословная цитата, которую док обещает в шапке («дословные цитаты — в кавычках-ёлочках»), в дереве больше не существует: `events.go:5-6` теперь читаетс
|
||||
|
||||
- `N045` major · `docs/architecture/16-events-emitter.md:66` · B-мёртвый-указатель — ВСЕ двенадцать якорей в `platform/docs/DEFECT_REGISTER.md` мертвы — ни один не попадает в свою строку. Фактические номера: PD-60→343, PD-61→344, PD-79
|
||||
|
||||
- `N046` major · `docs/architecture/17-seam-inbound-law.md:56` · B-мёртвый-указатель — Якорь родился верным и сгнил дрейфом — и уехал на строку, ВЫГЛЯДЯЩУЮ так же. На 23.08 (коммит `4f56160`, тот же, что написал якорь) `mining.go:221` бы
|
||||
|
||||
- `N047` major · `docs/architecture/17-seam-inbound-law.md:71` · C-исполненное-как-открытое — Загрузчик сида СТРОГИЙ с пака входной двери: `backend/internal/seed/decode.go` называет строку 212 своим именем и ставит `dec.KnownFields(true)` — неи
|
||||
|
||||
- `N048` major · `docs/architecture/17-seam-inbound-law.md:97` · C-исполненное-как-открытое — Первая строка таблицы «Двери, УЖЕ подразумеваемые живыми строками» описывает как ПРЕДСТОЯЩУЮ ту самую дверь, которую собственная шапка дока объявляет
|
||||
|
||||
- `N049` major · `docs/architecture/17-seam-inbound-law.md:100` · C-исполненное-как-открытое — Строка 231 закрыта паком «деньги» (D39.170, 29.08) и снята с бэклога — сам PROGRESS.md говорит это в лоб. Док цитирует её ДВАЖДЫ как живую: на строке
|
||||
|
||||
- `N115` minor · `docs/architecture/16-events-emitter.md:3` · E-второй-носитель — Движок с 31.08 (`bb541a8`) пишет `StreamVersion = "1.2"` — минор поднят под `Finished.Volume` (D39.181 п.2). 1.1 сегодня — это версия ЧИТАТЕЛЯ платфор
|
||||
|
||||
- `N116` minor · `docs/architecture/16-events-emitter.md:90` · C-исполненное-как-открытое — PD-60 (строка 88, «открыт») и PD-61 (строка 90, «открыт») оба стоят в регистре как `fixed(P6, дерево сессии)`. Шапка дока баннирует только «PD-113 отк
|
||||
|
||||
- `N117` minor · `docs/architecture/16-events-emitter.md:114` · B-мёртвый-указатель — Тела D39.119/122/123 уехали в слайс `docs/archive/architecture/05-decisions-D39-106-123.md`, где всего 210 строк — номера 394/416/428/430 там не сущес
|
||||
|
||||
|
||||
**Б7 — Движковые арх-доки: 03, 09, 10, 12**
|
||||
|
||||
- `N023` major · `docs/architecture/03-implementation-notes.md:64` · A-дрейф — Шапка строки 3 объявляет §3-контракты «живым референсом бэкенда», а формула §3.1 не совпадает с кодом ни одним полем-разделителем: реальный RequestHas
|
||||
|
||||
- `N024` major · `docs/architecture/03-implementation-notes.md:262` · D-противоречие-ратифицированному — D30 п.1 ратифицировал ПРЯМО ОБРАТНОЕ и с явным supersede: «Флип D1: редактор — БИЛИНГВАЛЬНЫЙ (черновик + исходник), новый дефолт». Реестр решений поме
|
||||
|
||||
- `N026` major · `docs/architecture/09-target-architecture.md:12` · A-дрейф — Канон стоит на 0.9.0, а не на 0.8.0: минор 0.9.0 залендён 31.08 паком платформы P12 (D39.180), и ОБА названных в этой же строке носителя показывают 0.
|
||||
|
||||
- `N027` major · `docs/architecture/10-prompt-architecture.md:51` · C-исполненное-как-открытое — Вопрос закрыт и ПОСТРОЕН: WS2 пака-11 отрендерил редакторский констрейнт-блок именно как src→dst-мэппинг, и D39.13 ратифицировал это дословно как «зак
|
||||
|
||||
- `N028` major · `docs/architecture/10-prompt-architecture.md:52` · C-исполненное-как-открытое — Q4a ИЗМЕРЕН 18.07 и ратифицирован D39.9 («верность НЕ покупается на translate-стадии»), а топологию ролей решил эксп-21 (D39.117: full-regen, починка
|
||||
|
||||
- `N092` minor · `docs/architecture/03-implementation-notes.md:212` · B-мёртвый-указатель — Ни `dc6ea8e`, ни `a32ec2e` в репозитории не существуют — `git cat-file -t` отвечает «Not a valid object name» на оба, при том что тот же вызов на реал
|
||||
|
||||
- `N093` minor · `docs/architecture/03-implementation-notes.md:267` · C-исполненное-как-открытое — Запрошенный «структурный запрет» построен и ратифицирован дважды: (1) на загрузке — `config/pipeline.go:731` отказывает конфигу, где модель провайдера
|
||||
|
||||
- `N095` minor · `docs/architecture/09-target-architecture.md:12` · A-дрейф — Механизмов, которых таблица не знает, уже не два: 31.08 (после последней правки дока) залендён пак D39.181/182 «закон раскрытия», добавивший в шов ДВА
|
||||
|
||||
- `N096` minor · `docs/architecture/09-target-architecture.md:178` · B-мёртвый-указатель — Токен `H14-inversion-guard` в ледджере, на который §3 явно ссылается заголовком раздела, не встречается ни разу: реальный идентификатор — `H14-D38.4-t
|
||||
|
||||
- `N097` minor · `docs/architecture/10-prompt-architecture.md:8` · B-мёртвый-указатель — `08-sync-audit-ledger.md` вынесен в `docs/archive/architecture/` 25.07 как отработанный (санкция владельца, `docs/archive/README.md:5`), и рядом с `09
|
||||
|
||||
- `N098` minor · `docs/architecture/10-prompt-architecture.md:17` · A-дрейф — Механизм, названный здесь как построенный, СНЯТ паком-15: пар-ключевая карта `prompts:` в конфиге сегодня не просто не используется — она отвергается
|
||||
|
||||
- `N099` minor · `docs/architecture/10-prompt-architecture.md:18` · B-мёртвый-указатель — Строка 366 живого D-лога сегодня пустая и лежит внутри эры D39.135 (приёмка фронта S4, 15.08) — то есть на 250 строк мимо цели и в чужой эре. Цитируем
|
||||
|
||||
- `N100` minor · `docs/architecture/10-prompt-architecture.md:33` · A-дрейф — Инвентарь пар-специфики в телах промтов неполон с 24.07: паком-13 в ОБА боевых промпта вписан блок «Единицы и приёмы (общие для zh→ru)» с зашитыми кит
|
||||
|
||||
- `N101` minor · `docs/architecture/10-prompt-architecture.md:41` · C-исполненное-как-открытое — exp15 как гейт ПАЛ: эксперимент исполнен и залендён 25.07 в редакции REV.2 (D39.7), потрачено $12.79. §4 п.2 того же дока это уже фиксирует («exp15 ЗА
|
||||
|
||||
- `N102` minor · `docs/architecture/12-go-style-notes.md:8` · C-исполненное-как-открытое — Норма как норма жива, но её единственный пример — мёртвый указатель, и он указывает ровно в обратную сторону. `backend/internal/pipeline/checkers_zh_r
|
||||
|
||||
- `N103` minor · `docs/architecture/12-go-style-notes.md:16` · B-мёртвый-указатель — Идентификатора `glossaryBlockHeader` в дереве нет: константа с русским заголовком жила в `internal/pipeline/memory.go:504` и удалена тем же паком-14 (
|
||||
|
||||
- `N104` minor · `docs/architecture/12-go-style-notes.md:17` · A-дрейф — Фактический хвост нормы («в код … не возвращаются») сегодня ложен: в НЕтестовом Go живут 8 упоминаний, все в комментариях — `cmd/tmctl/main.go:313`, `
|
||||
|
||||
|
||||
**Б8 — Корневые и онбординг: CLAUDE.md, README, STACK, glossary, product-requirements**
|
||||
|
||||
- `N022` major · `docs/README.md:13` · A-дрейф — Канон контракта уехал до 0.9.0 (заленджен 31.08, D39.180), а зонная копия стоит на 0.2.3 от 15.08 — 2999 строк против 1444. «Байт-зеркало» сегодня ЛОЖ
|
||||
|
||||
- `N050` major · `docs/glossary.md:11` · C-исполненное-как-открытое — P12 принят и залёнджен 31.08 нотой D39.180 (коммит 0a680a3), обязательство D39.158 закрыто целиком, регистр: major 2 против 7. Глоссарий лежит в онбор
|
||||
|
||||
- `N051` major · `docs/glossary.md:22` · E-второй-носитель — В START_PROMT.MD есть секция V6 от 18.08.2026 (идея переделки архитектуры пайплайна), разобранная в реестр 23.08 строками ПТ-37..ПТ-43. Парный носител
|
||||
|
||||
- `N052` major · `docs/product-requirements.md:32` · E-второй-носитель — Число — июльские деньги ДО пере-пина цен DeepSeek 13–15.08. Два других живых носителя того же числа несут ⚠-оговорку про множитель ×4.2–4.4 (STACK.md)
|
||||
|
||||
- `N053` major · `docs/product-requirements.md:56` · A-дрейф — P12 залёнджен 31.08 (0a680a3) вместе с минором, канон в дереве стоит на 0.9.0. Верно: канон 0.9.0 с 31.08 (D39.180), зеркало фронта отстаёт уже на СЕМ
|
||||
|
||||
- `N054` major · `docs/product-requirements.md:63` · D-противоречие-ратифицированному — D39.147 (слово владельца 17.08) АМЕНДИРОВАЛ условие разморозки: «лендинг P7 зону БОЛЬШЕ НЕ размораживает», S5-промт не выдаётся, разморозка — отдельны
|
||||
|
||||
- `N068` minor · `CLAUDE.md:8` · B-мёртвый-указатель — Путь написан от `docs/`, а файл — корневой: от корня репозитория `architecture/09-target-architecture.md` не существует; реальный путь — `docs/archite
|
||||
|
||||
- `N069` minor · `CLAUDE.md:21` · B-мёртвый-указатель — Второй уцелевший docs-относительный путь, битый ДВАЖДЫ: нет префикса `docs/` И нет расширения `.md`. Реальный носитель — `docs/architecture/12-go-styl
|
||||
|
||||
- `N070` minor · `CLAUDE.md:93` · A-дрейф — Число родилось верным и сгнило дрейфом. На 24.08 (ff03dca — коммит, вписавший фразу) голова, как её определяет титул D-лога («голова D39.124+ (подрезк
|
||||
|
||||
- `N083` minor · `docs/README.md:20` · A-дрейф — Половина фразы верна, половина протухла. `--check` действительно гейчен составом коммита (`docs/scripts/githooks/pre-commit:74`). `--lint` НЕ гейчен н
|
||||
|
||||
- `N084` minor · `docs/README.md:31` · A-дрейф — Правило не исполнено ровно для одного файла — и это тот файл, который холодная бэкенд-сессия увидит первым в `ls docs/`. `BACKEND_COLDRUN_V16_SESSION_
|
||||
|
||||
- `N085` minor · `docs/STACK.md:7` · B-мёртвый-указатель — Блок стадии draft лежит на строках 60–84 (`stages:` — 59, `- name: draft` — 60, следующая стадия `- name: edit` — 85). На заявленных 36–60 сегодня бло
|
||||
|
||||
- `N086` minor · `docs/STACK.md:15` · B-мёртвый-указатель — Блок `escalation` лежит на строках 142–159 (`escalation:` — 142, `chains:` — 143, `default:` — 153, `adult:` — 154, `budget_usd: 0` — 159). На заявлен
|
||||
|
||||
- `N087` minor · `docs/STACK.md:16` · B-мёртвый-указатель — Указатель РОДИЛСЯ ВЕРНЫМ 09.08 (085dbb9): строка 6 `docs/PROGRESS.md` тогда читалась «**Открыто на владельце:** прогон Sol-пакетов руками (150) · кред
|
||||
|
||||
- `N118` minor · `docs/glossary.md:7` · B-мёртвый-указатель — В файле docs/ORCHESTRATOR_SESSION_PROMPT.md (240 строк) символа «№» нет НИ РАЗУ: его шапка намеренно номер не держит — «Счётчик ролей ОДИН, номер выда
|
||||
|
||||
- `N119` minor · `docs/product-requirements.md:50` · B-мёртвый-указатель — Сам факт ЖИВ (проверено кодом, см. positive_control), но указатель «очередь №20» умер дважды: роль передана №20→№21 (D39.177, 31.08) и №21→№22 (D39.18
|
||||
|
||||
- `N120` minor · `docs/product-requirements.md:57` · B-мёртвый-указатель — Якорь РОДИЛСЯ верным 02.08 (fbefe33: тогда 89-93 были ровно комментарием «the --pairs column aligned byte-for-byte to how the edit wave concatenated t
|
||||
|
||||
|
||||
**Б9 — Ранние арх-доки 01/04/06 — баннеры или архив**
|
||||
|
||||
- `N025` major · `docs/architecture/06-memory-risk-registry.md:81` · B-мёртвый-указатель — Колонка «Где в коде/схеме» реестра указывает шесть file:line-якорей, и пять из шести уехали: реальные адреса — MessagesWithInjection render.go:246 (а
|
||||
|
||||
- `N088` minor · `docs/architecture/01-decisions.md:19` · A-дрейф — Каталога `pkg/` в бэкенде нет вовсе; план исполнен под `internal/`: internal/llm, internal/ledger, internal/obs, internal/store. Имена совпали, префик
|
||||
|
||||
- `N089` minor · `docs/architecture/01-decisions.md:39` · A-дрейф — FTS5 в движке нет НИ на горячем, ни на холодном пути: во всём backend/ ноль виртуальных таблиц и единственное упоминание FTS5 — отрицание в комментари
|
||||
|
||||
- `N090` minor · `docs/architecture/01-decisions.md:55` · B-мёртвый-указатель — Обоих коммитов в истории репозитория НЕ существует (`git cat-file -t c7f8a95` → «Not a valid object name»). Реальные коммиты того же дня и того же сод
|
||||
|
||||
- `N091` minor · `docs/architecture/01-decisions.md:93` · A-дрейф — Отдельного файла БД под банк памяти НЕТ и не было построено: у книги ровно ОДНА база `<book_id>.db` (config/book.go:189), и банк памяти живёт в ней же
|
||||
|
||||
- `N094` minor · `docs/architecture/04-unhappy-paths.md:120` · C-исполненное-как-открытое — Паспорт качества главы ПОСТРОЕН и отдаётся `tmctl status`: тип `pipeline.ChapterPassport` (internal/pipeline/status.go:157-159, «the per-chapter quali
|
||||
|
||||
|
||||
**Б10 — ЧУЖАЯ ЗОНА (санкция владельца 01.09): бэкенд-доки**
|
||||
|
||||
- `N007` major · `backend/README.md:11` · A-дрейф — Перечень команд читается исчерпывающим и отстал на ТРИ верба из одиннадцати: `backup`, `seed-lint`, `bank-apply`. `bank-apply` — это ратифицированная
|
||||
|
||||
- `N008` major · `backend/README.md:24` · A-дрейф — Машинной стоп-таблицы (`.bank-stop.json`) в движке НЕТ — её снёс пак «входная дверь шва» (d1eb8a9, ратифицирован D39.158); уцелевшая `.bank-stop.txt`
|
||||
|
||||
- `N009` major · `backend/README.md:82` · D-противоречие-ратифицированному — От `$HOME` НЕ дефолтится НИЧЕГО. `internal/standdata` резолвит корпус ТОЛЬКО от корня репозитория (`<repo>/books`), и его собственная шапка говорит пр
|
||||
|
||||
- `N010` major · `backend/README.md:99` · C-исполненное-как-открытое — Долг ПОГАШЕН и это записано в двух носителях. Код по обоим якорям сегодня говорит обратное README: repair.go:131 — «The boundary is the TARGET's decla
|
||||
|
||||
- `N011` major · `backend/README.md:101` · B-мёртвый-указатель — Строка 53 в едином трекере не существует: она закрыта D39.82 (носитель этого сказан в самой таблице — строка 111: «D39.82 закрыл строку 53 через `putU
|
||||
|
||||
- `N012` major · `backend/docs/D15.2-content-addressed-resume-spec.md:529` · A-дрейф — Голова схемы сегодня v16, а не v7, и номер v8 давно занят чужой миграцией. Спека при этом ЖИВА: строка бэклога 49 («Этапы Б+В спеки D15.2») открыта, и
|
||||
|
||||
- `N071` minor · `backend/README.md:20` · B-мёртвый-указатель — Экспортированной `chunk.Ingest` не существует — в пакете живёт неэкспортированная `ingest(p string)`, обёртка над `IngestEncoded`. Родилась ошибка в Т
|
||||
|
||||
- `N072` minor · `backend/README.md:94` · B-мёртвый-указатель — README объявляет, что все его «строка N» разрешаются в таблицу «Бэклог», и цитирует тринадцать номеров. Семь из них в таблице отсутствуют — закрыты и
|
||||
|
||||
- `N073` minor · `backend/docs/MONEY_HONESTY_REPORT.md:787` · C-исполненное-как-открытое — Заленджено — коммитом bb541a8 (31.08) и принято нотой D39.182. Фраза стоит в секции, которая сама называет себя «§11. Последний абзац — СОСТОЯНИЕ, не
|
||||
|
||||
- `N074` minor · `backend/docs/SEAM_FIX3_PLAN.md:1` · F-целиком-историческое — Четыре записки-плана паков шва — чистые списки намерений отработавших сессий. Паки приняты и заленджены (D39.158: «Четыре пака зоны бэкенда приняты и
|
||||
|
||||
|
||||
**Б11 — ЧУЖАЯ ЗОНА (санкция владельца 01.09): фронт-доки**
|
||||
|
||||
- `N055` major · `frontend/README.md:7` · A-дрейф — S4 исполнен 14.08 и ПРИНЯТ 15.08 (D39.135, `267aa35`): библиотека, интейк, форма запуска прогона, настройки, читалка — построенные экраны. Перечислени
|
||||
|
||||
- `N056` major · `frontend/README.md:66` · D-противоречие-ратифицированному — Зеркало НЕ байт-равно: 0.2.3/16 операций против канона 0.9.0/20 операций, разные md5. И правило «зеркало = байт-копия» ратифицированно ПРИОСТАНОВЛЕНО
|
||||
|
||||
- `N057` major · `frontend/docs/BACKLOG.md:50` · D-противоречие-ратифицированному — D39.144 (16.08) снял гейт полноты. Канон: `awaiting_bank` с ЛЮБЫМ состоянием решений → 202. Якорь `mining.go:201` тоже уехал: там сегодня стоит прямая
|
||||
|
||||
- `N058` major · `frontend/docs/BACKLOG.md:51` · B-мёртвый-указатель — В каноне 0.9.0 нет ни схемы `BankDecision`, ни значения `promote`, ни пути `POST …/bank/decisions`, ни «частичного накопления»: канон 0.5.0 снёс их и
|
||||
|
||||
- `N059` major · `frontend/docs/BACKLOG.md:62` · C-исполненное-как-открытое — Канон 0.9.0 перевесил поток на КНИГУ: `GET /books/{bookId}/events`, и его описание прямо называет причину — «a book is received and cut into chapters
|
||||
|
||||
- `N060` major · `frontend/docs/BACKLOG.md:63` · C-исполненное-как-открытое — Ручка построена: канон 0.9.0 даёт `GET /capabilities` с обязательным `language_pairs` («Every pair the deployment knows about, unavailable ones includ
|
||||
|
||||
- `N061` major · `frontend/docs/BACKLOG.md:68` · C-исполненное-как-открытое — Канон 0.9.0 несёт и `PATCH /books/{bookId}` (merge patch, только `title`, 409 при живом прогоне), и `DELETE /books/{bookId}` (204, 409 при живом прого
|
||||
|
||||
- `N062` major · `frontend/docs/FRONTEND_PLAN.md:692` · D-противоречие-ратифицированному — Ратифицированный канон 0.9.0 кладёт на провод ОДНУ пару {done,total}, считаемую в ГЛАВАХ по всем проходам, плюс открытую строку `stage`. Клиент, напис
|
||||
|
||||
- `N063` major · `frontend/docs/STACK_DECISIONS.md:245` · C-исполненное-как-открытое — Все ЧЕТЫРЕ пункта («пофазный прогресс», «персист манифеста глав и чанков», «JSON-выход таблицы подписи банка», «приём внешнего TRACEPARENT в cmd/tmctl
|
||||
|
||||
- `N121` minor · `frontend/README.md:21` · A-дрейф — Маршрутов ВОСЕМЬ: S4 завела `/intake`, и он есть в обоих замкнутых тестом списках. Приёмка S4 в том же дереве печатает «8 маршрутов, 11 сценариев».
|
||||
|
||||
- `N122` minor · `frontend/docs/BACKLOG.md:3` · B-мёртвый-указатель — Строк 99–102 в живом `docs/PROGRESS.md` больше нет — все четыре закрыты и по норме журнала («закрытые строки здесь НЕ хранятся») ушли в D-лог. Шапка у
|
||||
|
||||
- `N123` minor · `frontend/docs/BACKLOG.md:23` · B-мёртвый-указатель — Токена `--color-hint` в зоне больше нет вовсе — ни в `tokens.css`, ни в тестах, ни в коде; строка держит хвост на несуществующем токене. Вторая полови
|
||||
|
||||
- `N124` minor · `frontend/docs/FRONTEND_SESSION_PROMPT.md:2` · B-мёртвый-указатель — `S3_SESSION_PROMPT.md` в зоне не существует: промты S3/S3.5/S3.7 архивированы 14.08 в `docs/archive/prompts/FRONTEND_S3*`, зонные копии сняты. Довод б
|
||||
|
||||
- `N125` minor · `frontend/docs/STACK_DECISIONS.md:111` · B-мёртвый-указатель — Зона зависит от пакета `playwright` 1.62.1, а не от `@playwright/test`: последнего нет ни в `package.json`, ни в дереве `node_modules`. Сессия, постав
|
||||
|
||||
- `N126` minor · `frontend/docs/STACK_DECISIONS.md:116` · E-второй-носитель — Шагов у `check` шесть, и spectral — ЧЕТВЁРТЫЙ. Тот же файл на строке 148 уже утверждает «шесть шагов», то есть носитель противоречит сам себе; вторая
|
||||
|
||||
- `N127` minor · `frontend/docs/frontend-PROGRESS.md:221` · C-исполненное-как-открытое — Приёмка S4 состоялась 15.08 и записана В ЭТОМ ЖЕ ФАЙЛЕ строкой 465 («ПРИНЯТО и залендено `267aa35`, D39.135»). Два места одного файла говорят разное.
|
||||
|
||||
|
||||
**Б12 — ЧУЖАЯ ЗОНА (санкция владельца 01.09): платформенные доки**
|
||||
|
||||
- `N006` блокер · `platform/docs/STACK_DECISIONS.md:414` · D-противоречие-ратифицированному — Строка (и парная ей 415 про `mined_rejects`) неверна в четырёх местах сразу. (1) `mined_delta` БОЛЬШЕ НЕ «путь из book.yaml»: ключ РЕТИРОВАН — `Retire
|
||||
|
||||
- `N064` major · `platform/README.md:10` · A-дрейф — Перечень устарел с лендингом пака sqlc 29.08: `check: build vet fmt lint sqlc-check` — пятый шаг `sqlc-check` в списке отсутствует. Хуже перечня — умо
|
||||
|
||||
- `N065` major · `platform/deploy/README.md:252` · C-исполненное-как-открытое — Глагол `tmctl migrate` существует и заленджен (`backend/cmd/tmctl/migrate.go`, в диспетчере `main.go:184/:245`, свой код выхода `exitSchemaMismatch =
|
||||
|
||||
- `N066` major · `platform/docs/PLATFORM_DIRECTION.md:159` · C-исполненное-как-открытое — sqlc ВЗЯТ и заленджен 29.08 (`D39.172`: «Пак `sqlc` принят и заленджен: 40 запросов пяти файлов `pgstore` на типизированный слой, пин 1.31.1, `sqlc di
|
||||
|
||||
- `N067` major · `platform/docs/STACK_DECISIONS.md:621` · B-мёртвый-указатель — Лечебная команда «самой частой грабли стенда» указывает на путь, которого не существует: `tm-runs.slice` по конвенции имён systemd вложен в `tm.slice`
|
||||
|
||||
- `N128` minor · `platform/deploy/README.md:428` · C-исполненное-как-открытое — Воркер существует с пака P4: прогон спавнится в `internal/runs/spawn.go`, который задаёт `Workdir: l.Workdir` транзиентному юниту, а корень УЖЕ настро
|
||||
|
||||
- `N129` minor · `platform/docs/PLATFORM_DIRECTION.md:101` · B-мёртвый-указатель — Указатели на строки единого бэклога, розданные по всему срезу, в шести случаях целят в строки, которых в живой таблице БОЛЬШЕ НЕТ: правило бэклога — «
|
||||
|
||||
- `N130` minor · `platform/docs/STACK_DECISIONS.md:566` · E-второй-носитель — Перечень админ-команд отстал от CLI на семь глаголов. В диспетчере `cmd/tmplatformctl/main.go` сегодня: grant · adjust · balance · logins · revoke · b
|
||||
|
||||
|
||||
## Сверх находок — работы заказа, которых в реестре нет
|
||||
|
||||
Реестр отвечает на «что протухло». Заказ владельца шире, и эти пункты в него не попали:
|
||||
|
||||
- **Б13. Архивация отработавшего (0в).** Промт `BACKEND_COLDRUN_V16_SESSION_PROMPT.md` лежит в
|
||||
живом `docs/`, при этом ДВА носителя (таблица `README.md` и CURRENT-STATE) уже утверждают, что
|
||||
он в `archive/prompts/`. Плюс исполненные план-доки зон: `backend/docs/SEAM_*`,
|
||||
`MONEY_HONESTY_*`, `platform/docs/p8-review/`, `platform/docs/p9/`.
|
||||
- **Б14. Планы доработок в бэкенд и платформу (0б).** По остатку единого бэклога (189 строк,
|
||||
59 «скоро») и регистра платформы (435 строк, 97 открытых, major 2).
|
||||
- **Б15. Хвост лендинга ресёрча.** Очередь п.5 велит новой смене лендить файл, лендинг которого
|
||||
владелец 01.09 откатил (`162ab9b`). Пока формулировка стоит, следующая смена повторит откат.
|
||||
**Формулировку задаёт владелец — сам не переписываю.**
|
||||
2565
docs/DOC_REVISION_FINDINGS.md
Normal file
2565
docs/DOC_REVISION_FINDINGS.md
Normal file
File diff suppressed because it is too large
Load diff
23
docs/DOC_REVISION_REFUTED.md
Normal file
23
docs/DOC_REVISION_REFUTED.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# СНЯТЫЕ ОПРОВЕРГАТЕЛЕМ — НЕ ЧИНИТЬ (7)
|
||||
|
||||
## `docs/architecture/09-target-architecture.md:181`
|
||||
**Почему находка неверна:** Опровергнуто на СВОЁМ носителе автора. Автор предъявил реестр как доказательство закрытия, но легенда реестра (product-requirements.md:5) читает 🔶 как «ЧАСТИЧНО», а не «построено»: ПТ-18 (H10) = 🔶 с прямо названным остатком «продукт-кнопки и связка с прескрином = строка 94», ПТ-19 (H9) = 🔶 с остатком «замер скорости и ETA на целой книге = строка 54». Строка 94 бэклога в PROGRESS.md:239 держит кнопки стоп/продолжить ОТКРЫТЫМИ. Значит из трёх заявленных закрытий подтверждается ОДНО — H15 (ПТ-9 = ✅; терминолог реально в коде: backend/internal/pipeline/terminologist.go, backend/internal/terminology/*, KWIC в terminology.go). Заголовок находки «три из семи закрыты» — а на нём стоит severity major — ложен в двух случаях из трёх, и предложенная правка вписала бы в ратифицированный док НОВОЕ ложное утверждение «H9/H10 закрыты», прямо спорящее с 🔶 в реестре и с открытой строкой 94. Дополнительно: blame показывает, что строка 181 — нетронутый текст 13.07, покрытый общей оговоркой строки 14 «тело ниже = замысел арх-ресета 13.07», то есть это карта находок аудита, а не живой статус-борд.
|
||||
|
||||
## `docs/architecture/09-target-architecture.md:48`
|
||||
**Почему находка неверна:** Опровергнуты обе несущие посылки находки, хотя её кодовый факт я подтвердил. (1) Указатель самой находки битый: «⚠-баннер §2 строк 145–150» не существует — реальный баннер §2 стоит на строках 94–99, а 145–150 это тело «Слой 4»/«Слой 5». Находка, которая опирается на образец правки по несуществующим строкам, воспроизводима принимающим как ошибка. (2) Класс D («противоречие ратифицированному») не держится: D39.7 ратифицировал «граница — НЕ рычаг НА ЭТОМ МАТЕРИАЛЕ», D39.8 — «сцен-детекция/carryover-машинерия НЕ строятся ДЛЯ КНИГ ЭТОГО КЛАССА». Обе формулировки СКОУПЛЕНЫ книгами класса zh-вебновелла, а §0.1 — ровно инвариант про ДРУГИЕ классы книг («не смеет предполагать структуру конкретной книги»). Вписать в §0.1 «ось стратегии границы замерена и не строится» значило бы обобщить класс-скоупленный замер на весь спектр — та самая ошибка, которую §0.1 называет ЗАПРЕЩЁННОЙ («книга плоская → урежем нарезку»). (3) Посылка «§0.1 не покрыт оговоркой» неточна: blame показывает строку 48 как нетронутый текст 13.07, а строка 14 несёт общую оговорку «Баннер — не переписывание, тело ниже = замысел арх-ресета 13.07», покрывающую всё тело ниже шапки, включая §0.1; сам заголовок §0.1 датирован «(поправка владельца, 2026-07-13)». ПОДТВЕРЖДАЮ только кодовую половину: в backend/internal/chunk/ нет ни выбора стратегии границы, ни фоллбек-лестницы (греп 'logical|Logical' по пакету пуст при положительном контроле grep -c greedy backend/internal/chunk/chunker.go → 2; в backend/internal/config/ нет оси Boundary при положительном контроле — оси Segmentation/DraftBudgetOut там есть, pipeline.go:113–126).
|
||||
|
||||
## `docs/architecture/17-seam-inbound-law.md:74`
|
||||
**Почему находка неверна:** Находка построена на ДОК-КОММЕНТАРИИ, а не на механизме. Прочёл renderDecisions целиком (httpapi/bank.go:331-357): в ней нет ни одного switch и ни одной map — она проецирует ФОРМУ (null→0, presence-флаги), а слова передаёт как есть. И передавать их как есть законно, потому что на этом направлении словари СОВПАДАЮТ побайтно: wire-действия `approve`/`decline` равны membank.ActionApprove/ActionDecline (decisions.go:61-62), а закрытый wire-словарь `termKinds` — {name,place,title,term,nickname} — это ровно тот набор, который читающая таблица termKind пропускает без перевода. Обратного отображения контракт→движок в платформе НЕТ ВООБЩЕ: греп по контрактным словам находит только константы читающей таблицы, при рабочем положительном контроле (тот же класс грепа находит движковые auto/draft/seed/ruby/mined в bank.go:113-129). Значит утверждение дока «перевод односторонний, на чтении» СЕГОДНЯ ВЕРНО, и якорь на bank.go:15-21 жив (токен на :16). Исполнение находки вписало бы в ратифицированный закон ЛОЖЬ («перевод ДВУНАПРАВЛЕННЫЙ») — ровно тот вред, ради которого пересуд и существует.
|
||||
|
||||
## `docs/architecture/03-implementation-notes.md:5`
|
||||
**Почему находка неверна:** Ни одно утверждение баннера сегодня не ложно — я проверил каждое исполнением, значит класс A (дрейф факта) не выполнен. Баннер — ⚠-датированная запись о том, ЧТО СДЕЛАЛ ПАК-15 25.07; вписывать в неё bookfile (30.08) и standdata (27.08) значит приписать паку-15 то, чего он не делал, то есть заменить верную историческую запись на ложную. Премисса находки («док читается как карта кода») тоже не подтвердилась: и CLAUDE.md, и backend/README.md:3 адресуют 03 за КОНТРАКТАМИ Фазы 0 «через баннер», а карта пакетов лежит в backend/README.md, который бэкенд читает ПОЗИЦИЕЙ РАНЬШЕ. Второй носитель (12-go-style-notes:22) говорит о ратификации сплита и композит-корне — тоже не инвентарь пакетов.
|
||||
|
||||
## `CLAUDE.md:84`
|
||||
**Почему находка неверна:** Фактическая половина находки воспроизводится (файл tracked с 9bb00d4, шесть коммитов, последний 8afc2e7 29.08) — но вывод «класс A, док утверждал верное и сгнил» неверен по трём независимым уликам. (1) ХРОНОЛОГИЯ УБИВАЕТ КЛАСС A: правило впервые записано в CLAUDE.md 01.08 (87a0124), когда файл был под git уже четыре недели (с первого коммита 04.07). Утверждение, которое НИКОГДА не было верным как факт об индексе, не может «быть верным когда-то и стать ложным сегодня»; строка — НОРМА действия («не коммить»), а не описание состояния дерева. (2) ПРОЕКТ ЯВНО ЗНАЕТ ОБА ФАКТА И ПРИМИРИЛ ИХ МАШИНОЙ: живой отслеживаемый хук frontend/scripts/githooks/pre-commit:11-13 дословно пишет «START_PROMT.MD is tracked and often modified — a bare `git commit -a` would carry it away in silence» и блокирует файл в стейдже. Tracked-статус — не противоречие правилу, а ЕГО ПРИЧИНА: именно потому, что файл tracked и почти всегда модифицирован, голый коммит унёс бы его молча. Правило не протухло — оно вооружено. (3) КОММИТ 29.08 ПРЕДПОЛАГАЕТ ПРАВИЛО ЖИВЫМ, А НЕ ОТМЕНЯЕТ ЕГО: его собственное сообщение — «on his explicit instruction and against the standing guardrail», то есть разовое переопределение владельцем стоящей нормы; D-ноты, отменяющей норму, в живом логе и реестре нет (грепнуто при позитивном контроле 142 хита). Единственное живое упоминание в D-логе (строка 694) норму ПОДТВЕРЖДАЕТ. Плюс два дефекта в самой находке: (а) её собственный указатель битый — строка 694 принадлежит D39.157 (заголовок на 680), а не «D39.158 п.7» (заголовок на 696); (б) «цена уже уплачена» подменяет факт: reset --mixed 24.08 сделан «ПО ЕГО СЛОВУ» (владельца), дерево сверено побайтно по 20 файлам — правило отработало как задумано, а не навредило.
|
||||
|
||||
## `docs/glossary.md:37`
|
||||
**Почему находка неверна:** Находка перевёрнута: короткая форма — не описка, а ГОСПОДСТВУЮЩАЯ конвенция проекта, а выбивается ровно тот носитель, который находка объявила «верным». Счёт по живым докам: `configs/langpacks/` без префикса — 17 вхождений (в т.ч. CLAUDE.md:70 в §Гардрейлы, 09-target-architecture.md:125, 10-prompt-architecture.md:46, 12-go-style-notes.md, 13-tech-debt-anchors.md:146), `backend/configs/langpacks/` — ОДНО, и это как раз docs/glossary.md:47. Указатель не мёртв: собственный линтер проекта резолвит зонно-относительные якоря списком LINT_PREFIXES_RAW (в нём есть "backend/" и "backend/configs/"), комментарий рядом называет их «ЗОННО-ОТНОСИТЕЛЬНЫЕ якоря… их в корпусе больше пятнадцати», и --lint даёт 0 проблем. Опора находки на CLAUDE.md §Онбординг тоже не держит: та фраза («пути от КОРНЯ репозитория») стоит в пункте 3 маршрута чтения и относится к путям ДОКОВ в онбординг-списке, тогда как тот же CLAUDE.md пятью десятками строк выше сам пишет `configs/langpacks/`. Класс B не подтверждается: цель существует, резолвится инструментом и написана по канону.
|
||||
|
||||
## `platform/deploy/README.md:30`
|
||||
**Почему находка неверна:** Находка исходит из посылки, что путь в доке резолвится ОТ КАТАЛОГА ФАЙЛА. В этом репозитории посылка ложна, и это доказывается самим же файлом. `platform/deploy/README.md` пишет `internal/login/dev.go` и `internal/config/config.go` — от `platform/deploy/` каталога `internal` НЕ существует (проверено: MISSING), а от корня зоны оба файла на месте. То есть весь док последовательно пишет пути ОТ КОРНЯ ЗОНЫ `platform/`, и `docs/STACK_DECISIONS.md` — ровно та же форма, а не опечатка и не копипаст. Конвенция не самодельная: ратифицированный гейт якорей `docs/scripts/counts.py` резолвит путь перебором множества префиксов, где `platform/` стоит явно (`LINT_PREFIXES_RAW`), и на всём корпусе даёт «0 проблемных якорей в 100 живых доках». Прецедент из CLAUDE.md, на который опирается находка, — про другое: там пути не резолвились НИ от корня, НИ по конвенции. Наконец, все три вхождения — бэктик-текст, а не markdown-ссылка, так что «переход по ссылке из редактора промахивается» тоже не воспроизводится: переходить не по чему.
|
||||
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
1. **Клейм antipattern-дока «voice exemplars > прилагательных-дескрипторов» в универсальной форме НЕ подтверждён** — прямого сравнения для голоса персонажа не существует нигде (honest negative), а два ближайших прямых сравнения разнонаправлены. Но количественное ядро есть: **RoleLLM (Findings ACL 2024): описание роли 9.85% win-rate → +демо инлайном 30.19% → те же демо диалоговыми ходами 61.79%** *(ревью: числа arXiv-v1, судья GPT-3.5; в камере-реди ACL — 9.3→29.8→63.3, судья GPT-4, картина та же)* — exemplars главный рычаг, причём **формат важнее наличия**; **дистиллированный из реплик «voice sheet» бьёт сырой RAG-пример** (87/78% vs 39% win-rate); насыщение **~5 реплик**; **отбор по семантической близости ВРЕДИТ** (AA 69.3→36.0 — Enron, максимальное из четырёх падений; направление на всех датасетах). Итог: строить **гибрид** «1 строка регистра + 3–5 коротких разнообразных RU-реплик», не выбирать между экземплярами и дескрипторами. Наша проба на 蛊真人 подтвердила направление (§Пробы): гибрид — единогласный ранг-1 у судей двух семейств; детерминированный маркер (самоуничижение служанки 奴婢) — экземпляры/гибрид 4/4 vs база 1/4.
|
||||
2. **Голос выигрывается на ДРАФТЕ, не на редактуре** (проба P3): монолингвальный grok-4.3 с узким мандатом вернул черновик **дословно** в 3 из 4 конфигураций — он не сгладил голос (страх §14 внешнего дока на этом сэмпле не воспроизвёлся), но и **не восстановил** сплющенный: voice-блок редактора не заставил его вернуть потерянное самоуничижение служанки. Инъекция голоса нужна переводчику; редактору — только констрейнты сохранения.
|
||||
3. **Прайор-арт: «аналогов не найдено» стратревью — сузить, не снять.** Пер-персонажный голос в промышленном MT сериальной фикции **существует как продукт-клейм** (NAVER Webtoon «캐릭터 인식 번역» с БД речевых стилей, пресса 05.2026; Mantra — 口調-консистентность длинным контекстом; XL8 — файнтюн на серию), но **ни один механизм не раскрыт** публикацией или патентом. Детерминированный no-LLM словарный слой — массовая практика фан-стека (GalTransl 译前/译后/条件字典, LunaTranslator, SakuraLLM `src->dst #info`) — «учебник» найден; селективная инъекция по матчу — тоже НЕ уникальна (GalTransl/AiNiee). **Остаются уникальными:** спойлер-окна since/until (нигде, вкл. CAT и патентные индексы — скрининг, не FTO; ближайшее — NovelCrafter Codex Progressions, писательский тул), scene-state инъекция в MT, voice-exemplars в MT, и сама формула «disposition + окна + бюджет + детерминизм».
|
||||
4. **Оси «голос персонажа» нет ни в одном бенче литературного MT** (DITING, WMT24-Literary, BlonDe — CONFIRMED), и потерю различимости голосов при MT никто не измерял — наш voice-флаггер и BWS-рука голоса будут первым замером. Измерительная база: детерминированные маркеры (ты/вы — тривиальный морфоматч; маркер-листы; NG-лексика) + **mStyleDistance** (Findings ACL 2025, 9 языков вкл. русский, MIT, 0.3B — но качество умеренное, AV ROC-AUC ~0.66 → только мягкий флаггер, не гейт).
|
||||
4. **Оси «голос персонажа» нет ни в одном бенче литературного MT** (DITING, WMT24-Literary, BlonDe — CONFIRMED), и потерю различимости голосов при MT никто не измерял — наш voice-флаггер и BWS-рука голоса будут первым замером. Измерительная база: детерминированные маркеры (ты/вы — тривиальный морфоматч; маркер-листы; NG-лексика) + **mStyleDistance** (Findings ACL 2025, 9 языков вкл. русский, MIT, 0.3B — но качество умеренное, AV ROC-AUC ~0.66 → только мягкий флаггер, не гейт; ⚠ **само среднее 0.66 снято на ЧУЖИХ языках — ru-специфичных AV-чисел работа не публикует, см. §«Честные слабые места» п.4 этого файла**, испр. оркестратором №22 01.09).
|
||||
5. **Scene-state: полная схема — ниша пуста** (никто не инъектил «кто где/с кем/что скрывает» в MT с замером). Доказанный числом срез один: **направленный регистр пары** — 37% контекстных ошибок En→Ru это деиксис, **67% из них — ты/вы** (Voita ACL 2019); контекст поднимает точность 50→83.5%; formality-тег управляет с 73–92% acc (CoCoA-MT/IWSLT; *ревью: огибающая, RU там только zero-shot*). Второй опорный факт — **консистентность и качество развязаны** (DelTA, ICLR 2025, после сверки первоисточника: абляция Proper-Noun-Records +3.95 пп LTCR-1 при −0.02 sCOMET; на вебновеллах Guofeng +15.5…+32.7 пп сверх контекстного бейзлайна при ~+0.24 sCOMET) → выигрыш банка/реестров виден только специализированной осью, общие метрики его не покажут. Эпистемику/ложь в схему НЕ переносить: перевод сохраняет ложь исходника бесплатно.
|
||||
6. **Эпистемическое состояние читателя в переводе — ниша пуста** (spoiler-aware MT: 0 работ). Механика у нас уже есть: reveal-точки = те же спойлер-окна (`reveal_ch` + pre/post-reveal алиасы «таинственный незнакомец»→«её брат»); механический спойлер-канал zh→ru — **род русского прошедшего времени** (перевод из безродового языка принудительно раскрывает пол). Имплицитному трекингу «кто что знает» доверять нельзя (FANToM: человек 87.5% vs GPT-4+CoT 26.6%); прецедент инъектируемой модели читателя — StoRM (Findings EMNLP 2022, генерация). Переводоведение фиксирует наш риск качественно: эксплицитация — универсалия перевода — снижает саспенс.
|
||||
7. **Промптинг:** согласованное ядро вендоров — структурные блоки (XML хорошо, **JSON — худший** в long-context по замеру OpenAI), позитивные формулировки вместо голых запретов, reasoning-моделям не нужен ручной CoT; «сэндвич» инструкций (повтор ключевых констрейнтов после чанка) — дёшево и вендор-подтверждено. **NO_CHANGE редактору давать обязательно** (дефолт LLM — пере-редактирование: P51/R63 на GEC; правка безошибочного текста в минус COMET), но долю NO_CHANGE не читать как сигнал — эффект «опция-артефакт» (плацебо-опции срабатывают как «Unknown»: −15.75 пп, абстенция 32.9%). **«Двухпроходность в одном вызове» — арм НЕ ставить:** выигрыш мульти-проходности даёт refinement на готовом черновике (+1.05 COMET первый проход — это наш draft→editor), план/декомпозиция незначимы или в минус, DRT — файнтюн с ~12× output-токенов; self-check в том же completion наследует галлюцинации черновика.
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
- **SAMAS (arXiv:2602.19840, 23.02.2026) — поправка постановки: это НЕ speaker-aware метод.** «Spectrum-Guided Multi-Agent System for Style Fidelity in Literary Translation»: 81-мерный спектр из wavelet-преобразования **длин слов** детерминированно роутит текст в один из промпт-воркфлоу 6 агентов. Авторский стиль, не голоса персонажей; семантика мерена на нелитературных FLORES/WMT24, стиль — только human head-to-head без эффект-сайзов; неверный стилевой воркфлоу роняет ~5.5 XCOMET (абляция). **CONFIRMED** (препринт). Переносим только паттерн «дешёвый детерминированный сигнал → выбор промпт-варианта» — он проекту уже родной; сам метод не копировать.
|
||||
- **Оси «голос/регистр говорящего» нет ни в одном стандартном бенче** литературного/вебновелльного MT: DITING (6 осей, 18.7k экспертных zh→en пар), WMT24 Literary (general quality + discourse awareness), BlonDe (entity/pronoun/tense). **CONFIRMED** (peer-reviewed). Прямого замера потери различимости голосов при MT (per-character stylometry источник vs перевод) не найдено — измерено только лексическое обеднение (MTLD 96→90 en→nl при MT, 2408.17308). **CONFIRMED-absence.** → Наша voice-ось — первый замер, строить самим (см. §1.5, пилот).
|
||||
- **Измерительная технология существует, но EN-центрична:** стилевые эмбеддинги StyleDistance (2410.12757) — EN-only; **разрешение через добор: mStyleDistance (Findings ACL 2025) обучен на 9 языках ВКЛЮЧАЯ русский** (~40 стилевых фич, xlm-roberta-base 0.3B, MIT на HF) — но качество умеренное (AV ROC-AUC avg 0.66; STEL-or-Content: formality 0.71, остальные оси 0.30–0.37) → пригоден как **мягкий флаггер дрейфа, не гейт**. Персонажные эмбеддинги работают на фикшене: UAR+DramaCV — SOTA атрибуции цитат на 28 английских романах (Findings EMNLP 2024). Speaker-verification-as-eval: роль-плей LLM систематически **проваливает** верификацию спикера (2405.10150) — паттерн «различимы ли реплики без атрибуции» валиден как детектор потери голоса.
|
||||
- **Измерительная технология существует, но EN-центрична:** стилевые эмбеддинги StyleDistance (2410.12757) — EN-only; **разрешение через добор: mStyleDistance (Findings ACL 2025) обучен на 9 языках ВКЛЮЧАЯ русский** (~40 стилевых фич, xlm-roberta-base 0.3B, MIT на HF) — но качество умеренное (AV ROC-AUC avg 0.66 — ⚠ **среднее по ЧУЖИМ языкам, русского элемента в нём НЕТ**; STEL-or-Content: formality 0.71, остальные оси 0.30–0.37) → пригоден как **мягкий флаггер дрейфа, не гейт**. Персонажные эмбеддинги работают на фикшене: UAR+DramaCV — SOTA атрибуции цитат на 28 английских романах (Findings EMNLP 2024). Speaker-verification-as-eval: роль-плей LLM систематически **проваливает** верификацию спикера (2405.10150) — паттерн «различимы ли реплики без атрибуции» валиден как детектор потери голоса.
|
||||
- **Доказанные механизмы удержания голоса** (API-совместимые): retrieval **курированных** реплик персонажа помогает, retrieval сырого текста книги «barely enhances» (CoSER, ICML 2025, 771 книга; потолок Character Fidelity фронтиров ~49%); переинъекция персоны ближе к концу контекста лечит **меж-ходовой** дрейф (SPR, COLM 2024 — к нашим stateless-чанкам дрейф-лора не применима, см. §3.2). Persona drift измерен: 0.75→0.55 за 8 раундов; ошибки long-form кластеризуются в середине нарратива (40–60% длины); **люди ловят инжектированные ошибки консистентности с recall 17.1%** (авточекер 55% при precision 0.884) → холистическому чтению не доверять, нужны таргетные пробы.
|
||||
- Для zh есть готовая рубрика: **CharacterEval** (peer-reviewed, 1785 мультитёрн-диалогов, 77 персонажей китайских романов, 13 метрик, отдельные оси speech style / behavior) — донор осей для судья-анкеты.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue