Give the shift's operational debt a carrier: a stand that must outlive the battery using it, and evidence that exists on one machine only
This commit is contained in:
parent
cd96d8eea9
commit
ca9babd690
2 changed files with 3 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). Здесь только долг и его диспозиции.
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **313** строк · зона бэкенд **151** строго / **205** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **158** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
|
||||
> - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **314** строк · зона бэкенд **151** строго / **205** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **159** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора)
|
||||
|
|
@ -349,3 +349,4 @@
|
|||
| 427 | ⛔ **СТУПЕНЬ ТОЧНОСТИ ПРИБОРА НЕ ЗАЩИЩЕНА НИ НА ОДНОЙ МАШИНЕ, КРОМЕ ЭТОЙ.** Корпусные пины (`TestK6*`, `TestTheInstrumentAgainstTheColdRunOracle`) держатся только там, где есть дерево `books/`; здесь они идут и несущие в гейте, но **до первого гейта на другой машине или в CI ступень точности не защищена ничем**. ⚠ Различать надо две ступени, и первая цела: **механизм первичного вердикта защищён ГЕРМЕТИЧНО** — пять синтетических пинов краснеют без дерева книг (проверено посадкой четырёх мутаций дважды: «4 mutation(s) run, 0 unexpected»). Корпусные защищают ТОЧНОСТЬ, и это вторая ступень. Смягчение уже построено зоной: `backend/Makefile` цель `mutations` экспортирует абсолютные пути к корпусу, `battery-stand` форсирует `TM_CHECKER_LABELS=1` — отсутствие данных там ПАДАЕТ, а не скипает. ⇒ остаток ряда: что делает CI, у которого дерева книг нет по построению | бэкенд+оркестратор | скоро | решение по корпусу в CI: везти, генерировать или объявить ступень машино-зависимой | зона пака консистентности 11.09, проход старшего коллеги исполнением |
|
||||
| 428 | ⛔ **ЧЕТВЁРТАЯ ЛОВУШКА ДЛЯ СЧИТАЮЩИХ ДЕНЬГИ, и она умножает счёт на число КОПИЙ базы.** Замер оркестратора 11.09 при приёмке (контроль: `find` дал **449** файлов `*.db`, таблицу `spend` несут **406**, строк `spend` — **295**, различных дат — 18): сумма `committed_usd` по всем базам машины за 11.09 даёт **$4.354443 на 13 строках**, тогда как настоящая трата дня — **$0.419423 ОДИН раз**. Разница — не ошибка движка: таблица `spend` ключуется `(book_id, date)` и переезжает вместе с файлом, а рабочая сессия сделала девять копий базы прогона (`runA`, `runA-frozen`, `dbcopy`, обзорные копии, пред-миграционные бэкапы) — **одна и та же строка сосчиталась десять раз**. Плюс промежуточный бэкап на $0.16021 добавил одиннадцатый счёт того же прогона в другой момент времени. ⛔ **И тем же множителем больна ВТОРАЯ таблица, что я обнаружил только пере-замером по наводке аудита: `request_log` — 58 886 строк-экземпляров на 449 базах суть **5 413 УНИКАЛЬНЫХ**, множитель **10.88×**.** Я опубликовал по нему числа подстановки цены (ряд 413) и контроль ряда 422, не применив к ним собственную норму из ЭТОГО ряда — между заведением нормы и её нарушением прошёл час. ⇒ **любой денежный свод, собранный обходом файлов по диску, завышает трату кратно числу копий**, и это первое, к чему потянется рука при вопросе «сколько мы потратили за день». ⚠ Родня трёх ловушек акта `D39.247` п.5 (`run_attempts.spend_micro_usd` накопленная · `err` пуст на провалах · `chunk_status` недобирает терминологию) — у всех один класс: **прибор денег отвечает на вопрос, которого ему не задавали.** Лечение — не код, а норма свода: деньги считаются по УНИКАЛЬНОМУ `(book_id, date)` либо по одной авторитетной базе, и рядом печатается, сколько файлов прибор обошёл | оркестратор | скоро | норма денежного свода в ролевом промте + дедупликация по `(book_id, date)` | приёмка пака консистентности, 11.09 |
|
||||
| 429 | **БОЕВОЙ КОНФИГ НЕСЁТ ОТОЗВАННЫЙ ВЕНДОРСКИЙ КЛЕЙМ, И ЧИТАТЕЛЬ ЕМУ ВЕРИТ.** `backend/configs/pipeline-c1.yaml:86`=`v4-pro maps low` дословно: «v4-pro maps low→high, effective effort unchanged». Это было верно до 30.08 и **ОТОЗВАНО**: вендор сменил маппинг (`docs/experiments/00-provider-quirks.md` §3а — таблица теперь ОДНА на обе модели, `low→low`), и поведенческая проба полигона 30.08 за $0.038276 показала, что `low` до `pro` ДОХОДИТ. ⇒ комментарий в дереве утверждает ровно обратное живой правде, и стоит он в том самом файле, который промты велят читать. ⚠ Цена не гипотетическая: на этом клейме строилась оценка «ручки у редактора нет вовсе», и она уже уводила решение. ⛔ **Класс шире одной строки: вендорский факт, вмороженный в комментарий, протухает молча — у комментария нет ни даты, ни гейта, ни владельца.** Лечение узкое — привести строку в соответствие; лечение широкое — правило, по которому вендорский факт в коде несёт дату снятия и указатель на квирки, а не живёт вечно | бэкенд | скоро | правка строки 86 + правило «вендорский факт в комментарии несёт дату и адрес» | аудит смены 11.09 |
|
||||
| 430 | **ОПЕРАЦИОННЫЙ ДОЛГ СМЕНЫ 11.09, У КОТОРОГО НЕ БЫЛО НОСИТЕЛЯ НИГДЕ — заведён аудитом.** **(а) Стенд платного прогона A оставлен ПОДНЯТЫМ полигонной сессией и жив вторые сутки:** `tmplatformd` уже мёртв, но кластер postgres работает (`~/.local/share/tmstand/pgdata`, сокет `/tmp:55433`, ~245 МБ на девяти процессах — замерено `ps`). ⛔ **Гасить СЕЙЧАС нельзя, и это решение, а не забывчивость:** бэкенд-батарея без живого postgres СКИПАЕТ денежные пути (замерено при приёмке прогона A: первая «зелень» имела 420 пропущенных тестов, все «нет живого Postgres»), а её финальный гейт идёт прямо сейчас. ⇒ гасить ПО PID после закрытия бэкенд-пака актом; полигонная сессия велела «только по pid», и это верно — на машине живут чужие прогоны. **(б) Улики прогона A закоммичены (`ef0509f`, 33 файла) и НЕ ОТПРАВЛЕНЫ:** репозиторий книг на один коммит впереди `origin/main`, санкция владельца получена 11.09 («Да»), выполнить пуш должен он у себя — мой классификатор прав это действие не пропускает. ⇒ **единственная копия улик платного прогона живёт на ОДНОЙ машине.** ⚠ Класс обоих: операционное состояние, о котором знают только участники разговора, носителем не является — ровно тот класс, что эта смена ловила у себя дважды | оркестратор/владелец | **скоро** | (а) гашение по pid после акта; (б) `git -C books push origin HEAD` — действие владельца | аудит смены 11.09 |
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@
|
|||
> ⚠ **Эррата 04.09-а (D39.189 п.2б) — «обязательный `--ceiling-usd` на движковом вызове» верно для ПРЯМОГО прогона движка и НЕИСПОЛНИМО на пути через API платформы.** Там флаг никто не ставит руками: платформа выводит число сама — `bookCap = committed + increment` (`platform/internal/runs/spawn.go`, греп `func (m meter) bookCap`), ⚠ **ИСПР. 06.09: механизм СПИЛЕН** (`2812dd6`) — ставки за главу больше нет ни константой, ни ручкой, `increment` приходит из ПРОЕКЦИИ ДВИЖКА, а сама формула `bookCap` жива дословно. Прежняя редакция: где `increment` считается по ставке `DefaultPerChapter = 30_000` ($0.03, `platform/internal/pricing/pricing.go`), заниженной ×4.47 (D39.179 п.1). Сессия, исполняющая букву ноты, полезла бы крутить `TM_PLATFORM_USD_PER_CHAPTER` — хак под тест, запрещённый каноном. **Читать так:** потолок платного пака на API-пути задаётся ГРАНТОМ тест-аккаунту на объявленную сумму (`tmplatformctl grant --user <id> --usd <N>`) — холд делает перерасход невозможным по построению, — а путь до завершённой книги идёт цепочкой «покупка → пауза по потолку → пополнение → новый прогон», что и есть третий сценарий строки 216 и D39.176 п.3. Тело ноты не переписано (D23.3). Найдено контролёром при сверке плана, пере-проверено оркестратором по коду.
|
||||
|
||||
> ⚠ **Эррата 11.09-д (`D39.248` п.4) — «ЧЕТЫРЕ СТРОКИ СВЁРНУТЫ В ОДНУ» НЕВЕРНО ДВАЖДЫ, и вторая половина была не опиской, а НЕДОДЕЛКОЙ.** Пере-снято мною самоаудитом через час после лендинга ноты: полигонных строк в таблице активных промтов было **ТРИ** (`ХОЛОДНЫЙ ПРОГОН A` · `РЕМОНТ ПРИБОРА` · `фаза Д`), а не четыре — четвёртый файл (`PHASE_D_HANDOFF`) строкой таблицы никогда не был. ⛔ **И свернулись только ДВЕ:** моя правка шла от строки `РЕМОНТ ПРИБОРА` до `Фронт`, а `ХОЛОДНЫЙ ПРОГОН A` стоит в таблице ВЫШЕ и уцелел — то есть в таблице час провисели ДВЕ строки про один и тот же закрытый пак, сводная и прежняя. Строка удалена, в таблице осталась одна полигонная. ⭐ Класс — мой же, записанный в этой смене: **«моя правка на месте» не значит «сделано то, что я объявил»**; объём правки надо сверять с объявленным, а не с намерением. Поймал самоаудит ноты, не читатель.
|
||||
> ⚠ **Эррата 11.09-е (`D39.247`, шапка «Что принято») — «33 файла… НЕ КОММИЧЕНЫ» УСТАРЕЛО В ТОТ ЖЕ ЧАС.** Пере-снято 11.09: улики прогона закоммичены в отдельный репозиторий книг коммитом `ef0509f` («четыре артефакта нельзя воспроизвести ни за какие деньги»), **33 файла, 4953 вставки**, все тридцать три под контролем версий (`git -C books ls-files 'gu-zhenren/door-to-file' | wc -l` = 33). ⛔ **Но они НЕ ОТПРАВЛЕНЫ: репозиторий книг на один коммит впереди `origin/main`.** Владелец санкционировал пуш словом «Да» 11.09, мой классификатор прав его не пропустил, и выполнить его должен владелец у себя: `git -C books push origin HEAD`. ⇒ единственная копия улик платного прогона живёт на ОДНОЙ машине. ⚠ Класс: утверждение о состоянии дерева, верное в момент написания, протухает молча — у него нет ни гейта, ни даты.
|
||||
> ⚠ **Эррата 11.09-б (АДРЕС ИСПР. 11.09: носители — промт пака и таблица `docs/README.md`, НЕ тело `D39.247`) — «18 РАСХОЖДЕНИЙ» ЗАВЫШЕНО В 2.5 РАЗА, настоящих СЕМЬ.** Замерено бэкенд-сессией пака консистентности 11.09 по-юнитно: из восемнадцати промахов **11 ложные** — банковская форма доехала до читателя в том же юните СКЛОНЁННОЙ, а `SameStem` её не признал, потому что стеммер снимает ровно одно окончание и стеммы выходят разной длины (во всех одиннадцати один — строгий префикс другого с разницей в ОДИН знак). Пять из одиннадцати — намеренно исключённый мягкий знак (`D39.71`), и записка в дереве сама называет лечение — «anchor-gated match». ⇒ **акт остаётся верен в направлении и неверен в величине:** механизм консистентности работает и работает не везде, но НЕ-мест семь, а не восемнадцать. Носитель — строка бэклога **419**. ⚠ Класс: я опубликовал число, снятое ОДНИМ прибором, не спросив, что этот прибор не видит. ⛔ **Второй класс, пойманный ревью 11.09: эррату я адресовал НЕ ТУДА.** Числа «18» в теле `D39.247` нет ни разу — пере-снято грепом по живым докам (контроль: прибор прочёл 101 файл `docs/`, число нашлось в промте пака, в строке таблицы `docs/README.md`, в журнале и в ряду **419**). Акт говорит ДРУГУЮ величину на ДРУГОЙ популяции — «16 из 69, из них 6 отданы не банковской формой», снятую глазами по отгруженному файлу, и поправка стеммера её НЕ трогает. ⇒ поправлять надо было промт и таблицу, а акт — не надо было. ⭐ Урок: **у эрраты есть адрес, и он проверяется грепом ЧИСЛА по телу ноты, а не памятью о том, откуда я его взял.**
|
||||
> ⚠ **Эррата 11.09-в (D39.247 п.4 и вопрос владельцу) — Я ПИСАЛ ПО ОСИ, КОТОРОЙ В ПРОДУКТЕ НЕТ.** Акт называл «подписанный/неподписанный ТЕРМИН» и ставил владельцу вопрос «закон ли для неподписанного». Владелец 11.09: «нет такого понятия, подписан либо ВЕСЬ банк, либо он в неконсистентном состоянии; есть галочка скипать подпись — тогда автоподписывание». Это ратифицировано `D39.144` (подписывается банк ЦЕЛИКОМ; пер-термная подпись — НЕ модель продукта; дефолт — авто-продолжение с неподписанным банком, строки едут с пометкой). ⇒ **вопрос был сформулирован неверно и снят.** ⭐ Но под ним лежит РЕАЛЬНАЯ находка, и она дороже: в коде есть пер-термный автомат `auto|draft|approved`, и пост-проверка считает нарушением только `approved` — **механизм решает по единице, которой в продуктовой модели не существует.** Носители — строки **407** (исправлена) и **419**. Мерить надо состоянием КНИГИ (подписана целиком либо авто-продолжение), а не статусом отдельного терма.
|
||||
> ⚠ **Эррата 11.09-г (D39.247 п.4, ряд 418) — РАСХОЖДЕНИЯ ДВУХ ЧИСЕЛ ДВИЖКА НЕ СУЩЕСТВУЕТ, это была моя ошибка ЧТЕНИЯ.** Акт завёл ряд на «`spread=4` при трёх формах в списке» и «`other proposals` 2 против `drafts` 3». Пере-снято бэкенд-сессией и пере-проверено мной: движок печатает ДВЕ РАЗНЫЕ величины В ОДНОЙ СТРОКЕ — `spread=%d conventions=%d` (`backend/internal/pipeline/mining.go:542`=`spread=%d conventions=%d`), где `Spread()` = Σ сырых форм, `Conventions()` = len(свёрнутых классов); комментарий у определения говорит прямо: «Spread 3 with Conventions 3 is a real contest, and the two must not read the same at the stop». Распределение по 69 термам прогона: 60×(1,1) · 6×(2,2) · 2×(3,3) · 1×(4,3) — противоречий ноль. Второй «экземпляр» того же класса: `other proposals` печатает `props[1:]`, то есть ИСКЛЮЧАЕТ текущий `dst`, поэтому 3 черновика дают «other proposals: 2». **Ряд 418 удалён из таблицы; работы он не несёт.** ⚠ Класс ошибки — тот, что эта же смена записала нормой: сравнил число с длиной списка, меряющего ДРУГУЮ величину, и обе половины по отдельности были верны. Пин равенства вешает пак консистентности, чтобы объяснение держалось не текстом.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue