From 57260c0c9dfaaf732d9b4191638746fdfb73d6bf Mon Sep 17 00:00:00 2001 From: heaven Date: Mon, 31 Aug 2026 18:32:29 +0300 Subject: [PATCH] Route the seam finding the backend pack made outside its brief: the platform still promises what the engine revoked, and intake acts on that band destructively --- docs/PROGRESS.md | 58 +++++++++++++++++++++++++++++- platform/docs/platform-PROGRESS.md | 33 +++++++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 94f72244..e3663aa9 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -13,7 +13,7 @@ > - **Курс:** ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.59–78) → **ФРОНТ-ЭРА** (D39.81–100: зоны живые, контракт API ратифицирован) → **шов/платформа/движковые блокеры построены** (D39.106–123). Хвосты курса живут строками: 16 (полная цена холодного старта не измерена: у `coldrun-a`/`coldrun-b` нет НИ ОДНОГО редакторского вызова, хотя сама edit-волна отработала и оплачена — 58 вызовов волновым драйвером 23–25.07 на малых прогонах, плюс 648 до драйвера; ⚠ прежняя редакция писала «не гонялась НИ РАЗУ» — абсолют ложен, испр. оркестратором №19 по леджерам `~/books/gu-zhenren/**/*.db`; держит и оси голоса 13б/24) · 46 (дизайн заморожен D39.92/93, промт ждёт выдачи) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код `553f1a3`). > - **Горизонт (D39.62/67, освежён D39.95):** **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · цена 16; жильцы ролей решаются ДО прогона эксп-22 — строка 149 · веса K1–K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены). > - **Стек (полная карта роль→модель→конфиг→квирки — [STACK.md](STACK.md), D39.126):** draft deepseek-v4-flash thinking-ON `low` **⚠0731** → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН — строка 134; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4, пере-калибровка при следующем платном прогоне). ⚠ **Вендор-факты 13–15.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137):** таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.2–4.4 в пике / ×2.1–2.2 в долине — замер по трём прогонам); ⚠ про эффорт pro НОСИТЕЛИ ПРОТИВОРЕЧАТ и это НЕ РЕШЕНО (испр. 23.08 №19: прежняя редакция утверждала здесь одну сторону — «эффорт стал настраиваемым low/high/max, квирк 3а устарел»): квирк-канон и `STACK.md` говорят «ручки у pro НЕТ», замера поведением после 13.08 нет ни у одной стороны, и по гардрейлу владельца такое закрывается ВЕНДОР-СВЕРКОЙ, а не выбором стороны; до неё в силе канон, разбор — `STACK.md` строка редактора; ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); ⚠ посылка интерим-редактора «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже — вход ратификации фазы Д, D39.137 п.4); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания). -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 30.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **186** строк · зона бэкенд **87** строго / **124** широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183–187 — контракт-ревью 28, D39.138; 188–190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144; 193 — молчащие дыры выдачи, D39.147; 194–196 — приёмка пака честности, D39.149; 197 — фикс-лист ФЧ, D39.150; **198–204 — приёмка P7 и слова владельца 20.08, D39.153; 205 — слепота гейта якорей, аудит 21.08; 206–207 — приёмка P8-FIX, D39.154; 208–209 — аудит доков 22.08 (потеря глоссария на Gemini, риг живых проб); 210 — трассировка цепи банка 22.08 (род не производится авто-путём); **211–213 — консилиум шва 22–23.08: ключи провайдеров не доезжают до движка на SaaS (блокер 202), нестрогий загрузчик сида, дубль конвенции пути у платформы — 211 ЗАКРЫТА и 213 сужена лендингом P9 (D39.162); 214–216 — разбор журнала трассировки банка: подпись не оставляет следа, $0-репин недостижим с платформы, три несущих сценария не проверены живым движком; 217–218, 220 — аудит переезда машины 24.08: абсолютные пути полигона, дефолты корпуса в движке, бутстрап гейта доков чужой замороженной зоной; 219 (съехавшие line-якоря D-лога) — ⚠ ЖИВА, испр. 30.08: D39.157 п.6 объявил класс закрытым 24.08, но носителя в таблице не было, и 27.08 строка заведена ЗАНОВО со свежим замером; построена только первая половина лекарства (структурная сверка владельца ноты в `counts.py`)**; **236 ЗАКРЫТА D39.175** — движковая половина построена, платформенный остаток несут очередь №20 п.4 и `platform/BACKLOG.md` П-17; **238–239 — финальное ревью пака «писатель книги», D39.175; 240 — ревизия P9 оркестратором №20 30.08, находка Д3 без носителя; 241 — самопротиворечие канона на дочитанной книге, находка сессии P12, эррата 30.08-б; 242 — разъехавшаяся форма реестра нот; 243 — НЕПРИМЕНЁННЫЙ остаток того же аудита, 19 находок**) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **58** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 30.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **187** строк · зона бэкенд **87** строго / **124** широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183–187 — контракт-ревью 28, D39.138; 188–190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144; 193 — молчащие дыры выдачи, D39.147; 194–196 — приёмка пака честности, D39.149; 197 — фикс-лист ФЧ, D39.150; **198–204 — приёмка P7 и слова владельца 20.08, D39.153; 205 — слепота гейта якорей, аудит 21.08; 206–207 — приёмка P8-FIX, D39.154; 208–209 — аудит доков 22.08 (потеря глоссария на Gemini, риг живых проб); 210 — трассировка цепи банка 22.08 (род не производится авто-путём); **211–213 — консилиум шва 22–23.08: ключи провайдеров не доезжают до движка на SaaS (блокер 202), нестрогий загрузчик сида, дубль конвенции пути у платформы — 211 ЗАКРЫТА и 213 сужена лендингом P9 (D39.162); 214–216 — разбор журнала трассировки банка: подпись не оставляет следа, $0-репин недостижим с платформы, три несущих сценария не проверены живым движком; 217–218, 220 — аудит переезда машины 24.08: абсолютные пути полигона, дефолты корпуса в движке, бутстрап гейта доков чужой замороженной зоной; 219 (съехавшие line-якоря D-лога) — ⚠ ЖИВА, испр. 30.08: D39.157 п.6 объявил класс закрытым 24.08, но носителя в таблице не было, и 27.08 строка заведена ЗАНОВО со свежим замером; построена только первая половина лекарства (структурная сверка владельца ноты в `counts.py`)**; **236 ЗАКРЫТА D39.175** — движковая половина построена, платформенный остаток несут очередь №20 п.4 и `platform/BACKLOG.md` П-17; **238–239 — финальное ревью пака «писатель книги», D39.175; 240 — ревизия P9 оркестратором №20 30.08, находка Д3 без носителя; 241 — самопротиворечие канона на дочитанной книге, находка сессии P12, эррата 30.08-б; 242 — разъехавшаяся форма реестра нот; 243 — НЕПРИМЕНЁННЫЙ остаток того же аудита, 19 находок**) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **58** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 11–16, rerun2) · **`-25-31` (паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105)** · **`-08-02-04` (сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15)** · `-08-04-09` (пинги закрытых паков эры №15) · **`-08-14-15` (закрытые бэкенд-записи №16–17: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139)**. Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139). ## 📌 СОСТОЯНИЕ ПАКОВ (снимок 30.08, оркестратор №20; приёмки P11 и пака «деньги» — записи оркестратора №19 от 29.08) @@ -205,6 +205,7 @@ | 243 | **Остаток аудита доков 30–31.08: 19 удержанных находок НЕ применены** (аудит — 5 линз + верификатор на каждую, 57 находок, 55 удержаны, 36 применены сменой №20). Перечень: ~~**arch-3**~~ **ЗАКРЫТ 31.08 (D39.179 п.5)** — и был вдвое больше заявленного: не 13 якорей, а **51** (34 уехали, 1 мёртв, 16 верны), а дороже адресов оказались ЛОЖНЫЕ КЛЕЙМЫ (цитата контракта, которой нет; потерянный третий член `Usage`; живой К-13 при закрытом D39.132; метод `Settle`, которого нет). Чинилась ФОРМА, не номера: сверяемых гейтом по содержимому стало 89→127 · **arch-5** (правило языка знает две корзины, `reader.txt` — третья) · **arch-7** (§2 закона шва: дисциплина флока не описывает новый глагол-писатель) · **arch-9** (реестр загейченных триггеров не знает нажатых 30.08) · **arch-10** (`16-events-emitter.md`: словарь и `StreamVersion` разошлись с кодом обеих зон) · **arch-11** (`10-prompt-architecture.md`: описывает несуществующий с пака-15 ключ `prompts:`) · **arch-12** (шапка `09-target` сама зовёт себя неполной — строку под таблицей слоёв надо внести) · **contract-8** (эррата 15.08-в в шапке D-лога указывает на промт, уехавший в архив) · **contract-10** (`Export.failure_code` «becomes an enum with the first built format» — формат построен, условие наступило) · **progress-6/7/8/10/11/12/13/14/15** (мелочь CURRENT-STATE и строк бэклога: протухшие «запушена»/«строка 200»/якорь `miner_emit.go`/дубль 238 внутри 160 и пр.). ⚠ Отчёт аудита жил в песочнице сессии №20 и умирает с ней — здесь ЕДИНСТВЕННЫЙ носитель списка; воспроизведение = повторный аудит (5 агентов, ~2 часа) | оркестратор | скоро | пройти списком; major (arch-3) первым — док про деньги врёт указателями | аудит доков 30–31.08, сдача смены №20 | | 244 | **Гейт якорей на пре-коммите ломается всякий раз, когда зона правит КОД и СВОЙ реестр одним незакоммиченным деревом** — и врёт в обе стороны. Механика: хук судит ЗАКОММИЧЕННЫЙ док против РАБОЧЕГО кода, поэтому пере-нацеленные, но не залёнджённые якоря читаются как битые. Замерено на приёмке P12 31.08: у оркестратора хук напечатал 13 битых якорей `platform/docs/DEFECT_REGISTER.md`, у зоны `counts.py --lint` на том же дереве дал **0**; права зона — в HEAD `internal/runs/runs.go:323`, в рабочем `:347`, и токен по новому адресу на месте. ⚠ Обратная сторона опаснее и не замерена: якорь, ставший битым ПО-НАСТОЯЩЕМУ, тем же механизмом может оказаться зелёным. Свойство общее, не про этот пак | оркестратор | когда-нибудь | либо судить обе стороны из одного состояния (`--from-index` уже есть — проверить, покрывает ли он случай), либо печатать, что сравниваются РАЗНЫЕ состояния | приёмка P12 оркестратором №21, 31.08, разрешено командой | | 245 | **Pathspec-форма коммита молча роняет UNTRACKED-файлы, и сломанный коммит выглядит нормальным до первого чужого прогона.** `git commit -- <пути>` обходит ИНДЕКС и берёт рабочее дерево только для ОТСЛЕЖИВАЕМЫХ путей: предварительный `git add` нового файла она игнорирует. Поймано на лендинге P12 31.08 — коммит `e1cb692` унёс `migrations.sha256`, уже ссылавшийся на три миграции, а сами миграции 00029/00030/00031 и три теста остались снаружи; починено амендом секундного неопубликованного коммита при пустом индексе (`0a680a3`). ⚠ Канон git-координации в `CLAUDE.md` объясняет про pathspec ТОЛЬКО то, что она не трогает чужой индекс — то есть учит половине правды и ровно этим создаёт ловушку. Норма, которую предлагаю вписать: новые файлы стейджить явно и проверять состав `git show --name-only`, а не доверять форме | оркестратор | скоро (решение владельца — его канон) | одна строка в `CLAUDE.md` §«Git-координация мультисессий»; вписывает владелец или оркестратор по его слову | лендинг P12 оркестратором №21, 31.08 | +| 246 | ⚠ **ДВЕ КОПИИ ПОЛОСЫ ОТКАЗОВ 10–19 ОБЕЩАЮТ РАЗНОЕ — потребитель держит гарантию, которую производитель ОТОЗВАЛ.** Движок (`backend/cmd/tmctl/main.go:53`=`Nothing was written` is NOT the band's promise any more): «„Nothing was written“ is NOT the band's promise any more … **exit 15 legitimately answers with files on disk**». Платформа (`platform/internal/ingest/exit.go:38`=`nothing this process would have written was written`): «… and nothing this process would have written was written». ⚠ Опасность не теоретическая: по `PD-196` интейк действует по полосе РАЗРУШИТЕЛЬНО (отклоняет книгу и удаляет загрузку), а `exit 15` теперь легитимно оставляет файлы на диске. Хвост: движковый `exitBookIncomplete = 16` у платформы константы НЕ имеет вовсе (её словарь 10·11·12·13·14·15·19). ⚠ **Денежная половина ЦЕЛА в обеих копиях** (`nothing was spent` — по одному хиту в каждой), поэтому запрет отказывать классом полосы там, где деньги уже потрачены, в силе. Предсказано п.6 закона шва 17 | платформа (правка) + оркестратор (маршрут) | СРОЧНО | зона платформы приводит свою копию к движковой ЛИБО обе стороны идут в ратификацию, если расхождение намеренное | пак «деньги и честность», находка A15 вне заказа, 31.08; пере-проверено оркестратором дословно обеими копиями | | 217 | **Скрипты полигона захардкодили АБСОЛЮТНЫЕ пути двух корней и не работают на этой машине вовсе.** ДВА РАЗНЫХ слома. **Корень репо** — смена пользователя: литерал в 121 файле, из них 104 дословно `REPO = Path("/home/ubuntu/projects/textmachine")`, портабельных форм всего 5. **Корень книг** — оба события порознь: литерал `/home/ubuntu/books` 86 файлов (пользователь), портабельный `Path.home()/"books"` 89 файлов (переезд каталога; на прежних машинах работал). Объединение 173 файла. Пользователь теперь `ubuntu-26`, книги переехали в `<репозиторий>/books` ⇒ ломается и то и другое, включая ЖИВОЙ гейт фазы Д `eval/conformance.py:48`=`REPO = Path("/home/ubuntu/projects/textmachine")`. Живых носителей 26 по корню книг (среди них портабельная форма преобладает 20:6) плюс корневые гейты и сборщики корпусов; остальное — скрипты закрытых эксп-12–16, их владелец велел ВЫБРОСИТЬ, а не чинить (D39.157 п.4а). Форма правки — за зоной; приор оркестратора: один модуль путей, корень резолвится МАРКЕРОМ вверх по дереву (движок так и делает — `backend/internal/miner/miner_parity_test.go:29`=`derived from the repository MARKER`), книги от него, обе ручки перекрываются env | полигон | скоро (блокирует любой прогон зоны) | пак путей полигона | переезд машины 24.08, №19 | | 219 | **Line-якоря в тела D-лога обречены съезжать, и механизм именно в дисциплине эррат.** Эрраты вписываются в КАРТУ ШАПКИ (append-only, D23.3), то есть в начало файла, — значит каждая эррата сдвигает номера строк ВСЕХ тел ниже, и любой якорь вида `05-decisions-log.md:NNN` умирает молча. ⚠ Замерено на себе 27.08: три эрраты за сессию убили якоря в `17-seam-inbound-law.md:120` и `research/25-seam-cold-review.md:5` (оба целили в `:232`, тело уехало на `:239`). Лечение — не пере-нацеливание (оно повторится через эррату), а СМЕНА ФОРМЫ якоря: в тела D-лога целиться номером ноты (`^## D39.106`), который стабилен навсегда, а не строкой. ⚠ Строка ОБЪЯВЛЕНА в CURRENT-STATE 24.08 и до 27.08 в таблице НЕ СУЩЕСТВОВАЛА — очередь три дня ссылалась на носитель, которого нет; поймано свипом якорей при выдаче контрактного минора | оркестратор | скоро (растёт с каждой эрратой) | `--lint` учит форму `файл:^## D<номер>`, живые якоря в D-лог переводятся на неё | ревью доков 24.08, механизм и отсутствие носителя — 27.08, D39.160 | | 220 | **Репо-широкий гейт доков бутстрапится пакетным менеджером ОДНОЙ зоны, и та заморожена.** Диспетчер `.git/hooks/pre-commit` зоно-нейтрален по построению (`for hook in */scripts/githooks/pre-commit`, `#!/bin/sh`, node не нужен) и судит `CLAUDE.md` + `docs/**` + `platform/docs/**` + `frontend/docs/**` (`docs/scripts/counts.py:500`=`ROOT / "CLAUDE.md"`), но единственный его УСТАНОВЩИК — `frontend/scripts/githooks/install.mjs`, вызываемый ключом `prepare` из `frontend/package.json`. Охват и бутстрап не совпадают ⇒ инструмент решает свою задачу не в полной мере. Проверено исполнением 24.08: на этой машине `.git/hooks/` содержал только `*.sample`, гейт МОЛЧАЛ, ничего не проверив, и поймал первые четыре дефекта только после ручной установки; сессия бэкенда или доков `npm install` не делает никогда. Приор: зоно-нейтральный установщик в `docs/scripts/githooks/` как ЕДИНСТВЕННЫЙ писатель диспетчера, `prepare` фронта зовёт его — фронтовая половина выписана пингом №19 в зонный журнал фронта. ⚠ Ручная установка — временная мера, пока строка открыта; записывать её как порядок работы ЗАПРЕЩЕНО (это ровно тот обход, цену которого называет шапка `CLAUDE.md`) | доки + фронт | скоро | зоно-нейтральный бутстрап + правка `prepare` при разморозке | аудит переезда 24.08, №19 | @@ -290,6 +291,61 @@ > записки-плана и оба итога залендены и ратифицированы, решения живут телами D39.175 и D39.170. Читать > НЕ надо — там доказательная база, а не состояние. +### 31.08 — пак «ДЕНЬГИ И ЧЕСТНОСТЬ ВЫДАЧИ» ($0), сессия `textmachine-main-8a`. ОТРАБОТАН, лендинг за оркестратором + +Промт `docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md` (оркестратор №21). **Ни одного платного вызова.** +Записка-план, дизайн и отчёт — файлами в `backend/docs/`: `MONEY_HONESTY_PLAN-NOTE.md` · +`DISCLOSURE_LAW_DESIGN.md` · `MONEY_HONESTY_REPORT.md`. + +**ФАЗА 1 (главный результат) — сдана, НЕ ратифицирована сессией.** Закон раскрытия («факт класса X обязан +достичь потребителя Y по каналу Z») спроектирован, объясняет все ДЕСЯТЬ строк корпуса и назначает канал +каждой; спроектирован гейт из четырёх слоёв с названным несущим. **Корпус вырос с 10 до 14: найдены четыре +экземпляра вне заказа**, два из них сильнее самого заказа. ⛔ **К десяти экземплярам не приступала — +стоп-точка промта соблюдена буквально.** + +**ФАЗА 2 — три пункта, не зависящих от закона:** +* **A1** (дефолт эхо-регена) — `regenerate_echo_before_escalate: 1` в пяти шиппинг-конфигах, Go-дефолт + оставлен 0 с доводом (оправдание ручки — свойство МОДЕЛИ, значит данные). Три посадки, все проверены + краснотой под мутацией. Снапшот-нейтральность предъявлена МАШИННО, а не грепом. +* **A11** (строка 232) — `store.AnnouncedOnceKeys()` + ось доставки по анонс-леджеру. Две посадки. +* **A9** (строка 233) — **диагноз на живых деньгах, кода нет: решение с доводом** (лечение A9 и A2 — один + механизм, а A2 за стоп-точкой). + +**Батарея:** `MAKE_EXIT=0` (снят с самого `make`, не с обёртки), 18 пакетов ok, 4 без тестов, линтер 0 +issues. **Скипы, вслух:** `TestMinerFullBookParity` · `TestHelperEventsRun` · `TestHelperKillLoop`. +Корпусные измерения не гонялись. + +**⚠ ПИНГИ ОРКЕСТРАТОРУ (полный список — §7 отчёта), три самых дорогих:** +1. ⛔ **Две копии полосы кодов выхода 10–19 обещают РАЗНОЕ.** Движок (`cmd/tmctl/main.go`, греп + `The refusal band`): «**«Nothing was written» is NOT the band's promise any more** … exit 15 legitimately + answers with files on disk». Платформа (`platform/internal/ingest/exit.go`, тот же греп): «… **and + nothing this process would have written was written**». Потребитель держит гарантию, которую + производитель отозвал, а по `PD-196` интейк действует по полосе РАЗРУШИТЕЛЬНО. Правка — чужая зона. + ⚠ Денежная половина («nothing was spent») цела в обеих копиях. ⚠ Хвост: движковый + `exitBookIncomplete = 16` у платформы константы не имеет вовсе. +2. **Ось строки бэклога 194 ОПРОВЕРГНУТА живыми данными:** пере-покупка терминологии наступает не «на + сдвиге снапшота», а от БАЙТОВ БАТЧА. Разложение по покупкам: П1 $0.02056340 → П2 $0.02924141 (всё + свежее, снапшот не двигался) → П3 $0.00 (все чекпоинты попали, а снапшот КАК РАЗ сдвинулся). +3. **A5 (объёмный стоп) — ПИНГ С ДОМАШНЕЙ ЗАГОТОВКОЙ, приказанный промтом именно сюда.** Нового кода + выхода нельзя; **нового значения `Finished.Outcome` тоже нельзя** — но НЕ потому, что пара + код↔кадр биективна (она не биективна: у `OutcomeRefused` двойника в потоке нет), а потому, что + значение, живущее только в потоке, заставило бы два канала назвать РАЗНЫЙ исход одного прогона. + ⇒ рекомендую ЧИСЛА: леджер доставки (`max_units · delivered · reworked · flagged · free · left_fresh · + left_rework`) полями кадра `finished`. Класс — «новое поле» ⇒ ратификация оркестратора. + ⚠ Срочность понижаю сама: **платформа сегодня `--max-units` НЕ ШЛЁТ вообще** (`TranslateArgs`; во всей + зоне `platform/` флага нет вне комментария) — это дефект будущего потребителя, не живой инцидент. + ⚠ И предикат «выводимости», который я предлагала первой редакцией, ЛОЖЕН на самом прогоне A5: + `reconcile` выносит оплаченный-но-флагнутый юнит из `Delivered`/`Reworked`, поэтому признак обязан + ехать готовым числом, а не собираться потребителем. +4. **A3(б) ОПРОВЕРГНУТ как дефект `book_files`** — контракт «карта МЕСТ, не присутствия» написан обеими + сторонами с доводом, и платформа это поле не декодирует вовсе. Настоящий дефект рядом: + `build --format epub` МОЛЧА удаляет соседний `.txt`, различая «файл был» от «файла не было». + +**⚠ Для приёмки, называю сама:** первая редакция правки A11 уронила чужой ратифицированный тест +`TestARunThatRePaysNothingIsNotAskedForConsent`. **Тест не правился ни байтом** — предикат сужен по +существу (`ResetChunkStages` удаляет и строки, и чекпоинты ⇒ у редрайвнутого юнита текста нет), разбор +в §4.3 отчёта. Строка бэклога **197** не взята — ресурс ушёл в фазу 1; сказано прямо. + ## Полигон **📌 ПИНГ ПОЛИГОНУ от оркестратора №19 (28.08, D39.164) — вендор-вердикт по Gemini для `docs/experiments/00-provider-quirks.md`.** diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index fe78880a..4e311dc2 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -5,6 +5,39 @@ > читает этот журнал при каждом лендинге зоны (свип «решений владельца» — норма D39.99 п.4). + +## ПИНГ оркестратора №21 → зоне (31.08, СРОЧНО): ваша копия полосы отказов обещает то, что движок ОТОЗВАЛ + +Правку вносит ЗОНА. Пишу пингом, а не правкой, потому что `platform/` не моя зона — но откладывать +нельзя: по `PD-196` интейк действует по этой полосе РАЗРУШИТЕЛЬНО. + +**Расхождение, сверено дословно обеими копиями оркестратором.** + +| сторона | что обещает полоса 10–19 | +|---|---| +| ДВИЖОК (`backend/cmd/tmctl/main.go`, греп `Nothing was written`) | «nothing reached a provider, nothing was spent, no work needs rolling back… **„Nothing was written“ is NOT the band's promise any more**, it is a clause of the individual classes: **exit 15 legitimately answers with files on disk**» | +| ПЛАТФОРМА (`platform/internal/ingest/exit.go`, греп `nothing this process would have written`) | «…nothing reached a provider, nothing was spent, **and nothing this process would have written was written**» | + +**Почему это опасно, а не косметика.** Вы держите гарантию, которую производитель СНЯЛ. `exit 15` +(`write_incomplete`) теперь ЛЕГИТИМНО возвращается с файлами на диске, а ваш интейк по полосе +отклоняет книгу и удаляет загрузку. Это ровно тот класс, который п.6 закона шва 17 предсказывал: +копия контракта у потребителя пережила смену контракта у производителя. + +**Хвост:** движковый `exitBookIncomplete = 16` у вас константы НЕ имеет вовсе — ваш словарь +10·11·12·13·14·15·19. По конструкции полосы неизвестный класс безопасно читается как «отказ», так что +это не дыра, но назвать стоит. + +⚠ **Денежная половина ЦЕЛА в обеих копиях** (`nothing was spent` — ровно по одному хиту в каждой). +Поэтому вывод «полосой нельзя отказывать там, где деньги уже потрачены» остаётся верным, и бэкенд-пак +на него опирается. + +**Что прошу.** Привести вашу копию к движковой ЛИБО, если расхождение намеренное, вынести его на +ратификацию — потому что сейчас две ратифицированные копии одного контракта говорят разное, и +разрушительное действие висит на той, что устарела. Носитель — строка **246** единого бэклога. + +⚠ Находка НЕ моя: её принёс бэкенд-пак «деньги и честность» охотником вне заказанной десятки. Я её +пере-проверил дословно, но авторство чужое. + ## ПИНГ оркестратора №21 → зоне (31.08, из приёмки P12): гейт батареи подсказывает ОДНО условие хоста из трёх Правку вносит ЗОНА — не я. Прошу следующим платформенным паком, вместе с `PD-433`/`PD-434`/`PD-435`.