File the collision between the cell-count rule and the anchor token, since escaping a pipe inside a token silently breaks the match
This commit is contained in:
parent
a06f2a362f
commit
6d02d81c74
1 changed files with 2 additions and 1 deletions
|
|
@ -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). Здесь только долг и его диспозиции.
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 08.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **256** строк · зона бэкенд **124** строго / **171** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 1** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **113** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 08.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **257** строк · зона бэкенд **124** строго / **171** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 1** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **114** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора)
|
||||
|
|
@ -292,3 +292,4 @@
|
|||
| 358 | **ИТОГ ТРАТ ПРОГОНА ЗАНИЖЕН: `TOTAL (this run)` не включает стоимость классификатора.** `backend/internal/pipeline/waverun.go:218`=`res.TotalUSD += r.lastTerminology.CostUSD` — ⚠ **испр. 08.09: прежняя редакция несла числа `$0.007280`/`$0.005460` — они АВГУСТОВСКИЕ, из соседнего файла, к этому прогону отношения не имеют (моя ошибка при заведении ряда).** Замер прогона 08.09 по строкам леджера: терминологическая фаза стоила `$0.013608` = классификатор `$0.009013` + рендер-батчи `$0.002775` и `$0.001820`; в итог волны входит только рендерная сумма `$0.004595`, то есть две трети денег фазы до итога не доезжают. Предсуществующее, паком `D39.226` не вносилось и им не чинилось. ⚠ Класс тот же, что у строки 355: оператор читает о СВОИХ деньгах число, которое не сходится с леджером, и не может этого заметить без второго чтения. ⇒ либо включить, либо назвать в самой строке, что классификатор считается отдельно | бэкенд | скоро (до следующего платного прогона, где смотрят итог) | итог сходится с леджером либо объявляет своё исключение + пин | приёмка `D39.226`, живой прогон 08.09 |
|
||||
| 359 | **ТРИ ЯКОРЯ В ЧУЖИХ ЗОНАХ ПРОТУХЛИ ОТ ДВУХ ДВИЖКОВЫХ ЛЕНДИНГОВ — адреса уже найдены, править владельцам зон.** Линтер `counts.py --lint` даёт 6 проблемных якорей при 121 живом доке; три из них — фронтовые и пингнуты в `frontend/docs/frontend-PROGRESS.md` (зона ЗАМОРОЖЕНА). Остальные три, с новыми адресами, снятыми оркестратором 08.09: **(а) полигон** — `docs/experiments/23-editor-tier.md:7739` и `:7740` ссылаются на «×2 дешевле glm» в `configs/pipeline-c1.yaml:95` и `pipeline-arm-glm.yaml:6`; ⚠ цель ИСЧЕЗЛА, а не сдвинулась (греп даёт 0): долларовые числа сняты из шапки арма приёмкой `D39.226`, потому что стояли на опровергнутом ценовом базисе — значит якорь надо не пере-навести, а пере-написать по факту. **(б) бэкенд** — `backend/docs/DISCLOSURE_LAW_DESIGN.md:40` ссылается на `internal/pipeline/quality.go:233`, токен уехал на `:235`. ⚠ Оркестратор в чужие зоны не пишет; строка — носитель, чтобы адреса не искали заново | полигон + бэкенд | когда-нибудь (попутно с любым касанием этих файлов) | пере-наведённый якорь у бэкенда, пере-написанный по факту — у полигона | `counts.py --lint` 08.09 |
|
||||
| 360 | ⛔⛔ **ТАЙМАУТ ЧТЕНИЯ МАСКИРУЕТСЯ ПОД НЕЧИТАЕМОЕ ТЕЛО, РЕТРАИТСЯ И БИЛЛИТСЯ ПО ОЦЕНКЕ — 23–34 % ЦЕНЫ РЕДАКТОРСКОГО ПРОГОНА, И НОСИТЕЛЯ У КЛАССА НЕ БЫЛО.** Механизм доказан кодом: `backend/internal/llm/httpllm.go` в чтении ответа делает `data, _ := io.ReadAll(io.LimitReader(...))` — **ошибка чтения выбрасывается**, а обрыв распознаётся по РАЗМЕРУ (читают на байт дальше лимита), поэтому тело, оборванное дедлайном `attempt_s` посреди генерации, от целого НЕ ОТЛИЧИМО. Обрезок идёт в `json.Unmarshal` → `unexpected end of JSON input` → `BilledDecodeError` («2xx body decode failed (call IS billed)»), и возвращается он с флагом retryable **`true`** ⇒ вызов повторяется до `max_attempts`, и КАЖДАЯ попытка сеттлится ПО ОЦЕНКЕ. ⛔ Замер полигона (`docs/experiments/23-editor-tier.md`, п.5 «ЧЕТЫРЕ ТАЙМАУТА»): латентности `480390 / 480505 / 480577 / 480528` мс = **ровно 2 × `attempt_s: 240`**, класс назван `decode_error`, цена — **$0.475893 = 23.8 % руки строками, $0.689215 = 34.5 % юнитами**; полигон квалифицировал это как дефект ДВИЖКА и пингнул оркестратору («не наша зона»). ⚠ **Носителя не было: греп `attempt_s` и «таймаут чтения» по живому бэклогу — 0 хитов при 255 рядах** (контроль: `decode` — 3 хита), то есть спрошено существующее. ⛔ **И это ТА ЖЕ физика, что строка 331**, где вызов, оборванный потолком, уезжает в леджер НУЛЁМ: один предмет — «вызов оборвали МЫ, ответа нет» — движок сегодня закрывает ПРОТИВОПОЛОЖНО, оценкой в одном случае и нулём в другом. ⚠ **Граница честности:** что два вызова прогона 08.09 ($0.407606 = 32 % бюджета, «unexpected end of JSON input») были именно таймаутами — ВЫВЕДЕНО по совпадению подписи с замером полигона, а НЕ измерено: сырого леджера того прогона в дереве нет (`.db` новее 07.09 — 0 при 163). ⇒ инженерная половина (не выбрасывать ошибку чтения, отличать таймаут от нечитаемого тела, не ретраить вызов, оборванный СВОИМ дедлайном) — заказ без развилок; ДЕНЕЖНАЯ половина требует слова владельца: платит ли пользователь за вызов, который оборвали мы, и если да — по оценке или по нулю. Пока ответа нет, платформа биллит `committed_usd`, куда оценка уже попала | бэкенд | блокер-очереди для ПЛАТНЫХ прогонов (класс съедает четверть-треть бюджета; $0-работа им не блокируется) | ошибка чтения не выбрасывается · таймаут отличён от нечитаемого тела и НЕ ретраится · денежная диспозиция ратифицирована владельцем · строка 331 закрыта тем же решением | замер полигона exp-23 п.5 + разбор Fable 5 08.09, пере-проверено оркестратором по коду |
|
||||
| 361 | **ДВА ГЕЙТА ОДНОГО ФАЙЛА ТЯНУТ ЯЧЕЙКУ В РАЗНЫЕ СТОРОНЫ: экранирование `\|` по счёту колонок ЛОМАЕТ сверку токена якоря.** Счёт ячеек требует экранировать черту в тексте ячейки; сверка якоря сравнивает токен с кодом ДОСЛОВНО, а в коде черта без слеша. ⇒ токен, внутри которого есть `|`, после законного экранирования перестаёт совпадать с целью, и линтер кричит «цель уехала» на невиновного. Замерено платформенной сессией 08.09 на `PD-422`: якорь `internal/runs/runs.go:408` держал токен `resnapshot := book.BankMoved || book.HasPriorRun`; после экранирования черт по §4.5 токен перестал совпадать, и сессия починила это УКОРОЧЕНИЕМ токена — то есть заплатила точностью якоря за форму таблицы. ⇒ следующий, кто пойдёт экранировать черты, наступит на то же и так же потеряет точность. **Направление:** `norm()` в `docs/scripts/counts.py` снимает экранирование `\|` → `|` перед сверкой — шаг детерминированный и симметричный, как и схлопывание пробелов, которое та же функция уже делает по тому же доводу; докстринг «пробельная нормализация — и только она» правится вместе с поведением, иначе останется вторым носителем. ⚠ Укороченный токен `PD-422` после починки можно вернуть к полному | оркестратор | скоро | `norm()` снимает экранирование, селф-тест на случай `a \|\| b`, докстринг переписан | находка платформенной сессии 08.09 при исполнении пака разреза приёма |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue