diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 73be20ed..0e9774a2 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -3,7 +3,7 @@ > **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и 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`). > ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции. -> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **360** строк · зона бэкенд **190** строго / **243** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **189** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **362** строк · зона бэкенд **190** строго / **243** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **190** (перечень — грепом по таблице, рукописный список снят 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` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп. ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -396,3 +396,5 @@ | 479 | **ВАРИАНТЫ ЧЕРНОВИКОВ УХОДЯТ НАРУЖУ СКЛЕЕННЫМ ЯРЛЫКОМ, И КЛИЕНТ НЕ МОЖЕТ ПОКАЗАТЬ ИХ НА ЯЗЫКЕ ЧИТАТЕЛЯ.** В проекции банка вариант едет одной строкой вида «передача ×N», а при алиасе — с англоязычным хвостом про то, для какой поверхности он предложен: части (сама передача · число чанков · алиас) НЕ опубликованы отдельными полями. ⇒ платформа вынуждена везти это как непрозрачный текст, а разобрать ярлык у себя не вправе — движок держит парсер рядом с писателем именно потому, что второй, пере-выведенный, «продолжит работать до дня, когда у ярлыка появится поле, и тогда вернёт числа вместо ошибки». ⚠ Пара-специфики в форме нет, но **английский фрагмент в данных ломает общность по языку интерфейса**: ревью-вопрос «заработает ли пара, которой в репозитории ещё нет, без правки Go» здесь отвечается «нет на уровне ПОКАЗА». Лечение движковое: публиковать части ярлыка полями. Найдено платформенной сессией 17.09 на купленном сырье при исполнении п.4 аддендума владельца | бэкенд | когда-нибудь | части ярлыка опубликованы полями либо решено, что показ вариантов читателю не нужен | зона платформы 17.09, `D39.258` п.9 | | 480 | **В КОНТРАКТЕ ЖИВУТ НАДГРОБИЯ: 121 СТРОКА, КОТОРУЮ НЕ ОТДАЁТ НИКТО — и у одного куска нет носителя решения ВООБЩЕ.** Аудит 17.09 (сплошное чтение спеки и компаньона): мусора 3.5 % при 3497 строках, и это не забытый хлам — у каждого куска свой баннер «ретировано», то есть история, которой не хватило последнего шага. Состав: схема потолка в главах (46 строк, НОЛЬ ссылок во всём документе — единственный орфан из 68 схем, ретирована ордер-формой `0.11.0`, держится только генерённым кодом ЗАМОРОЖЕННОГО фронта) · локализованное сообщение и его поле в конверте ошибки (23 строки; ⛔ **пере-снято мной 17.09: ноль упоминаний в не-тестовом коде платформы** — и, по аудиту, ноль хитов по журналу решений и обоим бэклогам, то есть ЕДИНСТВЕННЫЙ кусок контракта без носителя решения) · поле потолка в заявке прогона (16 строк, ⚠ УДАЛЯТЬ НЕЛЬЗЯ: единственное `deprecated` в файле, оно РАБОТАЕТ отказом на входе, чтобы старый клиент не купил молча не то). ⚠ Снимать разумно ТЕМ ЖЕ актом, что синк зеркала фронта, иначе фронт при разморозке сгенерит их заново. ⚠ Локализованное сообщение либо обосновать нотой, либо снять: сегодня его не защищает ничто | платформа + оркестратор | когда-нибудь (вместе с синком зеркала при разморозке фронта) | мёртвые схемы сняты либо у каждой назван носитель решения | аудит контракта 17.09 | | 481 | **ОТКАЗ КНИЖНОГО ПОТОЛКА В БАНК-КОНТУРЕ ТЕРЯЕТ БАТЧИ ПОЗАДИ ОТКАЗАННОГО — включая УЖЕ ОПЛАЧЕННЫЕ, чей повтор стоил бы $0.** Цикл покупки банк-батчей на `errReserveCeiling` делает выход, и всё, что стояло в очереди после отказанного, не попадает НИ в счётчик выброшенных, ни в счётчик прошедших: единственный след — предупреждение посреди прохода. ⚠ Это противоречит правилу, которое пре-флайт того же контура объявляет у себя («деньги дороже проекции, но молчать о потере нельзя»), и **дефект ПРЕД-СУЩЕСТВУЕТ паку лестницы**: до неё потерянный батч и не покупался, после неё позади отказанного могут стоять оплаченные. Названо зоной в приёмочном круге 17.09 и сознательно НЕ чинено: смена поведения, которой пак не заказывал. Адрес — ветвь отказа резервации в цикле банк-ролей. ⛔ Цена молчания растёт вместе с механизмом «решённое остаётся решённым»: чем больше батчей переигрывается за ноль, тем дороже потерять их из-за отказа на соседнем | бэкенд | скоро | потерянные батчи попадают в счётчики либо выход заменён продолжением с честным учётом | зона `textmachine-main-12`, приёмочный круг 17.09 | +| 482 | **СВЕРКА ПОТРАЧЕННОГО С РЕАЛЬНЫМ СЧЁТОМ ПРОВАЙДЕРА — МОЖЕТ СДЕЛАТЬ ТОЛЬКО ВЛАДЕЛЕЦ, и это единственное, что закрывает вопрос.** Полигон исполнил свой долг по сверке кассы двумя путями и получил ОТРИЦАТЕЛЬНЫЙ результат: сверка на диске невозможна В ПРИНЦИПЕ, потому что цена вычисляется НАШИМ ЖЕ кодом по прайс-таблице, а не приходит от вендора; на 213 клетках у четырёх вендоров из шести арифметика сходится до последнего знака, но это сходимость с собственной таблицей, а не с кассой. ⇒ единственный оставшийся прибор — счёт в личном кабинете провайдера, и доступ к нему есть только у владельца. ⚠ Заведено 17.09 при выносе хроники полигона в архив: по условию владельца (`D39.261` п.2) живое обязательство уезжает СТРОКОЙ ТРЕКЕРА прежде, чем носитель уедет в архив — иначе оно умирает вместе с файлом | владелец | когда-нибудь | сумма сверена с кассой провайдера либо объявлено, что сверка не нужна | хроника полигона, вынос 17.09 | +| 483 | ⛔ **СПРАВОЧНИК ПРОВАЙДЕРСКИХ ЛОВУШЕК НЕСЁТ ЦЕНЫ, ОПРОВЕРГНУТЫЕ ПЕРЕ-ПИНОМ, И ЭТО ФАЙЛ, КОТОРЫЙ КАНОН ВЕЛИТ ЧИТАТЬ ПЕРЕД КАЖДЫМ ВЫЗОВОМ.** `docs/experiments/00-provider-quirks.md:35`=`НЕ изменились (flash` утверждает, что после смены поколения цены DeepSeek прежние — flash $0.14/$0.28 при кэш-хите $0.0028, pro $0.435/$0.87. Боевой конфиг несёт другое: `backend/configs/models.yaml:231`=`input_per_m: 0.44, cached_per_m: 0.014` и `backend/configs/models.yaml:247`=`input_per_m: 1.32, cached_per_m: 0.044`. ⇒ расхождение втрое по входу и вчетверо по выходу, а кэш-хит разошёлся на порядок. ⚠ Пинг об этом выписан оркестратором №18 ещё 20.08 и не исполнен год-в-год: тогда каталог считался чужой зоной. С `D39.260` п.4 зона ОБЩАЯ ПРОЕКТНАЯ ⇒ чинит оркестратор. Шапка исправлена 17.09, ряд держит остаток: пере-снять ВЕСЬ ценовой блок справочника у вендора, а не только одну строку | оркестратор | скоро | цены справочника сверены с боевым конфигом и вендором целиком | пинг №18 20.08, замер 17.09 | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index da8d2f15..a4718301 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -3938,7 +3938,7 @@ bought NOTHING». ⇒ **`tmctl manifest` есть НИЖНЯЯ граница, - `docs/architecture/05-decisions-log.md:43`=`Эррата 28.08-к` — эррата 28.08-к в ШАПКЕ этого журнала; шапка сама объявляет форму якорей в телах не подлежащей правке и велит читать с поправкой. Цель «seed-FILE edit» жива на `backend/internal/pipeline/status.go:1042`=`a seed-FILE edit not yet re-run is NOT reflected here` и `:1201`. - `docs/experiments/23-editor-tier.md` — четыре якоря ЗАМОРОЖЕННОГО отчёта эксперимента. Замороженному отчёту положен штамп коммита, а не перенаведённые якоря: иначе улику правят задним числом. - Три якоря в доках фронта — ЧУЖАЯ зона. Заведён ряд **457**, и обе уехавшие цели названы в нём готовыми адресами (`docs/architecture/14-api-contract/README.md:1138`=`не различает две беды`, `docs/architecture/14-api-contract/openapi.yaml:1633`=`enum: [source_unreadable, not_configured, processing_failed, content_refused]`), потому что сами цели — в МОЕЙ зоне. -- `docs/experiments/00-provider-quirks.md:163`=`ТОТ ЖЕ ДЕФЕКТ ЖИВЁТ В ДВИЖКЕ` починен **не токеном**: там цель не «уехала», а описанное состояние ИСЧЕЗЛО — `toOpenAIMessages` перестроена 28.08 и склейку теперь делает. Подставить найденный в цели токен значило бы подгонку под зелень; адрес переведён в ИСТОРИЧЕСКИЙ, живой стоит строкой ниже (`backend/internal/llm/httpllm.go:766`=`func toOpenAIMessages`). +- `docs/experiments/00-provider-quirks.md:169`=`ТОТ ЖЕ ДЕФЕКТ ЖИВЁТ В ДВИЖКЕ` починен **не токеном**: там цель не «уехала», а описанное состояние ИСЧЕЗЛО — `toOpenAIMessages` перестроена 28.08 и склейку теперь делает. Подставить найденный в цели токен значило бы подгонку под зелень; адрес переведён в ИСТОРИЧЕСКИЙ, живой стоит строкой ниже (`backend/internal/llm/httpllm.go:766`=`func toOpenAIMessages`). ⛔ **МОЯ ОШИБКА ПРИБОРА, снятая замером (и она стоила бы ложной находки о чужой зоне).** Сверив свои восемь со списком HEAD, я насчитал ДВА новых якоря во фронте и готов был назвать их следствием лендинга. Замер сказал обратное: цели БАЙТ-ИДЕНТИЧНЫ дереву и HEAD — `14-api-contract/README.md` 1608 строк в обеих, `openapi.yaml` 3497 в обеих, токены на `:1138` и `:1633`. Новыми они не были: **линтер капит список, и контрольный прогон напечатал 25 строк из 27**. Класс — «список, из которого делаешь утверждение, не режь», с поворотом: резал не я, резал ПРИБОР, а выглядело это как факт о дереве. ⇒ у обрезанной выдачи спрашивай знаменатель даже тогда, когда обрезал её не ты. diff --git a/docs/experiments/00-provider-quirks.md b/docs/experiments/00-provider-quirks.md index 7c1eb86e..8289da45 100644 --- a/docs/experiments/00-provider-quirks.md +++ b/docs/experiments/00-provider-quirks.md @@ -26,6 +26,12 @@ > * **mistral** — `mistral-large-latest`/`-2512`, `mistral-medium-latest` живы. > > ⚠ **«Слаг живой» ≠ «модель та же»** (урок катовера DeepSeek 31.07, D39.61) — листинг доказывает +> ⛔ **ИСПР. ОРКЕСТРАТОРОМ 17.09 — АБЗАЦ НИЖЕ О ЦЕНАХ УСТАРЕЛ И ОПАСЕН, потому что этот файл читают ПЕРЕД вызовом провайдера.** +> Боевой конфиг несёт совсем другое: `backend/configs/models.yaml:231`=`input_per_m: 0.44, cached_per_m: 0.014` для flash и +> `backend/configs/models.yaml:247`=`input_per_m: 1.32, cached_per_m: 0.044` для pro — то есть втрое по входу, вчетверо по выходу, +> а кэш-хит разошёлся на порядок. Числа ниже оставлены как история замера 31.07 и ИСПОЛНЕНИЮ НЕ ПОДЛЕЖАТ. +> ⚠ Остаток (ряд **483**): пере-снять у вендора ВЕСЬ ценовой блок справочника, а не одну эту строку — расхождение найдено на ней, +> но никто не проверял соседние. Пинг об этом выписан 20.08 и не исполнялся, пока каталог числился чужой зоной; с `D39.260` п.4 зона общая. > только доступность имени. Цены DeepSeek пере-сняты в тот же день и НЕ изменились (flash > $0.14/$0.28 cache-hit $0.0028 · pro $0.435/$0.87 cache-hit $0.003625); сноска вендора о > **готовящемся значительном повышении** на прайс-странице ПРИСУТСТВУЕТ и на 10.08.