Ratify the intake landing and retire its prompt: four rows leave the tracker, one narrows to the half that is still open, and three anchors follow the code that moved
This commit is contained in:
parent
ddcbf0c03d
commit
f1404f0296
8 changed files with 43 additions and 16 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -30,7 +30,7 @@
|
|||
| **Бэкенд · СТРУКТУРА ГЛАВ (ДИЗАЙН)** | [CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md](CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md) | ⚠ **ПРОЕКТИРОВАНИЕ, НЕ СТРОЙКА** (`D39.136` п.3): дизайн окна большой пере-нарезки — чем адресуется глава и развязка чанкера (161) · карта осей сдвига · банк-окна на chapter-ID · контент-адресуемый resume `D15.2` · IR/адаптеры/индуктор · правило заголовка и не-CJK путь (303) · гранулярность EPUB (302) и выдача (283). Снимает временный отказ интейка книге из одной главы (`D39.221`). Пак 1 «форматы и честный словарь» ОТРАБОТАН и ПРИНЯТ 06.09 — акт **D39.210**, промт в `archive/prompts/`. ⚠ **ПАК 2 (лексиконы не-CJK, корпус, замер оракулом) — НЕ НАПИСАН и ждёт файлов владельца** |
|
||||
| Бэкенд · отозванный | активного НЕТ | пак КАЧЕСТВО написан и ОТОЗВАН до выдачи 05.09 (`archive/prompts/…_WITHDRAWN.md`): предмет дешевле пака — точность чекера уже измерена, пере-снять её стоит одной команды. Следующий пак — СТРУКТУРА ГЛАВ (решение владельца 05.09 «любая книга любого формата»), пишется |
|
||||
| Бэкенд · прежний | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) |
|
||||
| **Платформа · РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ** | [PLATFORM_INTAKE_TRUTH_SESSION_PROMPT.md](PLATFORM_INTAKE_TRUTH_SESSION_PROMPT.md) | ⚠ **ВЫДАН 08.09, $0.** Забирает синхронный разрез приёма до готовности (строка **332**, семь пунктов из десяти — три названы исключениями) плюс правду зоны о себе: ограничитель параллелизма у СИНХРОННОГО входа (у очередного он есть) · граница бюджета хвоста выводится из кода · рантбук про молчание маршрута · протухшая шапка зонного журнала и три ряда регистра. ⚠ Прошёл оба рубежа и разбор Fable 5; пять блокеров закрыто ДО выдачи, в том числе развёрнутое наоборот пред-решение оркестратора по инструменту отказа |
|
||||
| Платформа · РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 08.09** — акт **D39.229** (`ddcbf0c`, 26 путей, $0); промт в `archive/prompts/` с баннером-исходом. Синхронный вход разреза под потолком, граница хвоста выведена из кода, зонный журнал и регистр приведены к правде (открытых 112 → 109, major 3 → 1). Живое из не взятого — строка **364** (потолок разрезов не есть потолок процессов движка) |
|
||||
| Платформа · ДЕНЬГИ И ПРАВДА | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 07.09** — акт **D39.221**, контрактный минор **0.13.0**; промт в `archive/prompts/` с баннером исхода. ⚠ **Синхронный разрез приёма остановлен правилом остановки и заландён построенным, но НЕ готовым** — десять пунктов несёт строка бэклога **332**, и она же заказ следующему паку зоны; ложный инвариант бюджета заландён осознанно (окно 8 с при дефолте в 16 минутах) |
|
||||
| Платформа · ФОРМА ЗАКАЗА | активного НЕТ | пак ОТРАБОТАН, ПРИНЯТ С ДОФИКСОМ и ЗАЛЕНДЕН 06.09 — акт **D39.208**, код + канон **0.11.0**; промт уведён в `archive/prompts/ORDER_FORM_SESSION_PROMPT_2026-09-05.md` с баннером исхода. ⚠ **НЕ построено, хотя заказывалось:** денежный ползунок на проводе объявлен, а отправить его нечем, и оценки под ВЫБРАННЫЙ заказ нет; «упрощение резюма» не сделано — обе позиции живут строками бэклога, брать их как новый пак СЛЕДУЮЩЕЙ сессии, не читать промт как задание |
|
||||
| Платформа · прежний | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) |
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Реестр D-нот — карта актуальности v2 (D1–D39.228; титул — носитель головы, бампать при каждом аппенде)
|
||||
# Реестр D-нот — карта актуальности v2 (D1–D39.229; титул — носитель головы, бампать при каждом аппенде)
|
||||
|
||||
> ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не
|
||||
> место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы,
|
||||
|
|
@ -287,3 +287,4 @@
|
|||
| D39.226 | 08.09 | **АКТ: движковый пак «правда оператору и деньги» ПРИНЯТ С ДОФИКСОМ** (`e48bca2`). Закрыты строки 333–338; остатки — 353(+)/354/355/356/357/358. Числа приёмки: батарея 19/0/4, мутации 48 записей и 0 unexpected, свип `0 of 259`, каталог 232→259 и 21→48 в гейте, тесты +18. ЖИВОЙ ПЛАТНЫЙ ПРОГОН (санкция владельца, потолок машинным гейтом): `committed=$1.259217` против сметы `$0.350075` — **`tmctl manifest` есть нижняя граница, не прогноз**; 64.6 % «купило ничего»; оплаченный `2xx` с оборванным телом — 32 % бюджета. Строка 335 опровергнута своим же замером: не «прямые деньги», а 4.1 % кандидатов, и фаза платится раз на книгу. Два блокера закрыты корнем, третий круг нашёл мёртвый страж | жив | ЖИВОЕ: строки 354–358 и остаток 353; три ошибки ЗАКАЗЧИКА названы в п.8 | движок деньги банк оператор приёмка |
|
||||
| D39.227 | 08.09 | **ТРИАЖ И ВЫДАЧА ДВУХ ПАКОВ** («движок уже знает» + «разрез приёма и правда о себе», оба $0). Заведена строка **360** — таймаут чтения маскируется под нечитаемое тело, ретраится и биллится по оценке (23–34 % цены редакторской руки), носителя у класса не было; строка **354** называла механизм свойством провайдера и исправлена. Пред-решение оркестратора «новый корневой `code`» ОТОЗВАНО: корневой закрыт, открыт `cause.code`. Фантом-гард спущен до номера ПУНКТА. Вопрос владельцу: платит ли пользователь за вызов, оборванный нами | триаж · паки · деньги · контракт |
|
||||
| D39.228 | 08.09 | **АКТ: движковый пак «движок уже знает» ПРИНЯТ С ДВУМЯ ДОФИКСАМИ** (`2b6f1f4`, 21 путь). Полнота банка доезжает до подписи и до stdout, классификатор вошёл в итог трат, банк-роли разведены в разложении. Закрыты строки 253 · 355 · 357 · 358 · 312. **Ратифицировано: аддитивное поле манифеста ключ НЕ двигает, но обязано быть отличимо от своего нуля** (прецедент `price`/`structure`; бамп перекупает каждую книгу). Третья смена поведения заказана приёмкой: лог и экран перестали спорить о полноте. Открыты строки 362 и 363 | приёмка · банк · деньги · манифест |
|
||||
| D39.229 | 08.09 | **АКТ: платформенный пак «разрез приёма и правда о себе» ПРИНЯТ** (`ddcbf0c`, 26 путей, $0). Синхронный вход разреза получил потолок; граница хвоста выведена из кода; шапка журнала и три ряда регистра приведены к правде. ⭐ Потолок сам назвал, чего НЕ ограничивает — остаток строкой **364**. Адверсариальный проход: 8 находок, 6 — дефекты этого же пака на ЗЕЛЁНОЙ батарее; норма про НАПРАВЛЕНИЕ заландена `c3039be`. Девятая находка — вечное зависание, класс вне досягаемости батареи и мутации | приёмка · приём · параллелизм · самопроверка |
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
# Журнал решений оркестратора — контракт D1–D39.228 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
# Журнал решений оркестратора — контракт D1–D39.229 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
|
||||
> **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто:
|
||||
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+).
|
||||
> ⚠ **Эррата 15.08 (D39.132):** D39.131 п.2(а) перечисляет полосу отказов «10 конфиг · 11 источник · 12 лок · 19 безымянный» — читать через D39.132 п.2(г): полоса ДОПОЛНЕНА **exit 13 = `schema_mismatch`** (~~обе зоны сошлись на числе независимо~~; ратифицирован направлением, ФИНАЛИЗИРОВАН приёмкой D39.134).
|
||||
> ⚠ **Эррата 15.08-б (D39.134 п.2а, вписана по аудиту корпуса):** клейм «зоны сошлись на 13 НЕЗАВИСИМО» (строкой выше и в D39.132 п.2г) СНЯТ — платформа прочитала число из незакоммиченного дерева движка и сама это записала (`platform/internal/ingest/exit.go:63-64`); на силу ратификации не влияет.
|
||||
> ⚠ **Эррата 15.08-в (D39.136 п.5):** форма контракт-ревью «фазный воркфлоу оркестратора» ОТМЕНЕНА словом владельца тем же днём — исполняет ОТДЕЛЬНАЯ СЕССИЯ со своим онбордингом (норма D39.120 п.2; оркестратор — автор части ратификаций 0.2.3, author≠reviewer); запущенная воркфлоу-фаза 1 остановлена, её результаты выброшены; промт — `docs/CONTRACT_REVIEW_SESSION_PROMPT.md`.
|
||||
> ⚠ **Эррата 08.09-в (`D39.228` п.1) — АКТ ОБЪЯВИЛ ЗАКРЫТОЙ СТРОКУ, У КОТОРОЙ ЗАКРЫТА ПОЛОВИНА.** Пункт 1 писал «закрыты строки 253 · 355 · 357 · 358». Для 253 это неверно: её собственное тело называет лечением (б) «полнота консолидации в сайдкар **+ поле на `BankPage`**», и второй половины нет — у секции `consolidation` ноль читателей, класс A заведён сознательно. ⇒ строка СУЖЕНА до платформенной половины, не удалена; 355 · 357 · 358 · 312 закрыты и удалены. ⛔ **Класс `D39.167` п.1 в чистом виде, и поймала его та же норма, что его называет:** «каждое утверждение акта о ряде сверяется его СТАТУСОМ в тот же заход» — сверка сделана через час после акта, а не до, и это разрыв в МОЁМ порядке: ратификация и сверка носителей обязаны идти ОДНИМ движением, иначе акт живёт с переоценкой ровно столько, сколько я собираюсь до неё дойти.
|
||||
> ⚠⚠ **Эррата 08.09-б (`D39.221`) — МОЙ РАТИФИКАЦИОННЫЙ КОММИТ ОСТАВИЛ ГЕЙТ ВЕРСИИ КОНТРАКТА КРАСНЫМ НА СУТКИ, И ЭТО ТОЧНАЯ ИНВЕРСИЯ ПОРЯДКА, КОТОРЫЙ САМ ЖЕ ПРОЕКТ РАТИФИЦИРОВАЛ.** `D39.208` п.1: код идёт первым с ЧЕСТНО КРАСНЫМ гейтом версии, канон гасит его вторым — «гейт не подгоняли под мир, а мир привели к гейту». Я сделала наоборот. Замер (`git show <коммит>:<файл>`): на `fda0679`, лендинге зоны, канон `0.12.0` И `httpapi/capabilities.go` `ContractVersion = "0.12.0"` ⇒ гейт ЗЕЛЁНЫЙ, и число акта «батарея 20/8/`EXIT=0`» — честное, под сомнение НЕ ставится. Следующий коммит, мой `3d90943`, увёл канон на `0.13.0` и константу за собой не потянул ⇒ `gates.TestTheAnnouncedContractVersionIsTheOneTheCanonRatified` красен с 07.09: «this build announces contract 0.12.0 and the ratified canon is 0.13.0». Практическое следствие названо самим гейтом: клиент, сгенерённый по объявленному `0.12.0`, откажет на формах, которые деплой реально возвращает. ⛔ **Нашла это платформенная сессия на СВОЁМ входном baseline, через сутки, и только потому, что промт велел снимать его самостоятельно** — то есть между моим ратификационным коммитом и следующей сессией зоны батарею не гоняет никто. Константу поднимает зона (её файл), заказанность объявлена мной явно: это обслуживание от ратифицированной смены (`D39.183`), а не правка ради зелени. ⚠ Урок в свою сторону и он общий: **бампнув канон, я обязана пере-гонять гейт ТОЙ зоны, чей код канон судит** — мой собственный `counts.py --check` этого класса не видит по построению, он сверяет доки с доками.
|
||||
> ⚠ **Эррата 08.09-а (`D39.185`) — УКАЗАТЕЛЬ НА РЕЕСТР НАХОДОК РЕВИЗИИ ВЕДЁТ В НИКУДА.** Тело ноты дважды
|
||||
> (`:1929`, `:1942`) называет реестр `docs/DOC_REVISION_FINDINGS.md`; файла по этому пути НЕТ (проверено
|
||||
|
|
@ -31,7 +32,7 @@
|
|||
> ⚠ **Эррата 28.08-к (D39.165 §3 + решение оркестратора о глава-полосе) — ДВЕ ошибки, обе найдены широким самопроходом платформенной сессии, обе доказаны исполнением.** **(1) Посылка «смета УЖЕ публикуется в `status --json`» верна только ПОСЛЕ свёртки.** `bank-apply` пишет только ФАЙЛЫ решений, а `status` считает ре-билл от СОХРАНЁННОГО глоссария (`backend/internal/pipeline/status.go:962`=`seed-FILE edit` ⚠ (адрес испр. 06.09: цитата УЕХАЛА, не исчезла; в теле `D39.165` она осталась по прежнему адресу — тело ноты не переписывается, D23.3)``, `projectStoredMemory` — его собственный комментарий: «A seed-FILE edit not yet re-run is NOT reflected here… that drift surfaces on the next translate's re-seed»). Свёртка происходит внутри СЛЕДУЮЩЕГО `translate`, поэтому сразу после правки движок отвечает `units=0`/`drift=false`. Следствие: продажа «затронуто N юнитов» и холд от сметы В ТЕКУЩЕМ ШВЕ НЕДОСТИЖИМЫ — для них нужен движковый глагол «свернуть банк и оценить ВНЕ translate», которого нет. **(2) Решение оркестратора «полоса пере-прохода — в ГЛАВАХ» ОТМЕНЯЕТСЯ: его посылка опровергнута.** Я рассудил, что $0-репин двигает полосу, потому что идёт через тот же `resumeFromChunkStatus`, — и не проверил анонс. Движок анонсирует юнит ОДИН РАЗ на жизнь книги (announce-once, `backend/internal/pipeline/events.go:49,143-162`=`announce-once keys`), пере-проход не ре-анонсирует ни репины, ни пере-переводы ⇒ `done` остался бы НУЛЁМ навсегда. Это ровно тот класс, от которого предостерегает памятка «не выводить из соседнего механизма, не проверив свой». ⚠ **Что при этом НЕ отменяется:** запрет класть ЮНИТЫ в поле, объявленное в главах, стоит — но объявленная в каноне «одна единица работы» запретом не является, потому что она НЕ молчаливая.
|
||||
> ⚠ **Эррата 29.08-а (D39.172, две строки, объявленные заведёнными) — ошибка ОРКЕСТРАТОРА №19.** Тело ноты дважды утверждает «Заведено строкой» / «строка заведена» — про `Touch`, выбрасывающий `RowsAffected`, и про пересборку `tmctl` в рецепте стенда. **На момент ратификации ни одной из этих строк не существовало:** последняя строка регистра платформы была `PD-430`, и проверка грепом по `Touch|RowsAffected|пересбор` давала только совпадения слов в чужих строках. Утверждение о будущем записано как о свершившемся — ровно тот класс, который эта же смена ловила у сессий трижды. **СНЯТА 29.08: строки заведены зоной — `PD-431` (`Touch`) и `PD-432` (пересборка `tmctl`), `PD-423` получил вторую точку. Проверено грепом по регистру.** Тело ноты не переписывается (D23.3). ⚠ Сюда же третий пункт того же абзаца: `PD-423` предписано ПЕРЕ-ПРОВЕРИТЬ (у сессии `sqlc` тест зелёный в трёх прогонах), и пометки в строке регистра тоже нет.
|
||||
> ⚠ **Эррата 30.08-б (D39.165 §2 и §3, две находки платформенной сессии P12).** (а) **Якорь протух:** §2 цитирует фразу канона о `chapters_done` по `openapi.yaml:1542-1545` — текст уехал на **`1554-1559`**, по прежним строкам сейчас `RejectReason`. Сама цитата верна дословно; нота не битая, битым стал только номер (класс строки бэклога 219). (б) **§3 назвал живое САМОПРОТИВОРЕЧИЕ канона и не дал ему носителя:** правка банка «takes effect on the NEXT run» (`openapi.yaml:504`) против «finished work is not bought twice» плюс подъём потолка только у ПРИОСТАНОВЛЕННОЙ книги (`:590`) — у дочитанной книги следующего прогона купить нечем, поэтому принятая правка умирает молча. Ни в едином бэклоге, ни в регистре платформы строки не было (проверено грепом по обеим фразам) — **заведена строка бэклога 241** 30.08. ⚠ Класс — «названо в теле ноты и не получило карриера»; норма приёмки требует строку ТЕМ ЖЕ лендингом, здесь она не легла два дня.
|
||||
> ⚠ **Эррата 30.08-а (D39.176 п.5, `PD-421`) — ошибка ОРКЕСТРАТОРА №20, пойманная ВЛАДЕЛЬЦЕМ.** Пункт вынесен владельцу с формулировкой «открытая вкладка теряет сессию примерно через час» — **неверно, и ровно тем классом, от которого предостерегает записка передачи: вывод из соседнего числа вместо проверки.** Час — это ПЕРИОДИЧНОСТЬ `SweepSessions`, а срок жизни сессии другой: `SessionIdleTTL` = **14 суток**, `SessionMaxAge` = **30** (`platform/internal/config/config.go:344-345`=`defaultSessionIdle`), причём окно бездействия скользит на любом аутентифицированном запросе (`platform/internal/auth/middleware.go:66`=`a.Sessions.Touch(r.Context(), digest`; поток `Touch` не зовёт — грепом 0, и это не важно при окне в две недели). Реальное следствие `PD-421` — то, что и записано в её теле: сессия, протухшая по бездействию И подметённая, гасит поток с опозданием до часа, то есть после ДВУХ НЕДЕЛЬ без единого действия. **Вопрос СНЯТ с листа владельца как несущественный; правка в паке P12 не нужна, строка остаётся `info`.** Владелец вопросом «ты уверен или придумываешь?» поймал ошибку до того, как она стала заказом на работу.
|
||||
> ⚠ **Эррата 30.08-а (D39.176 п.5, `PD-421`) — ошибка ОРКЕСТРАТОРА №20, пойманная ВЛАДЕЛЬЦЕМ.** Пункт вынесен владельцу с формулировкой «открытая вкладка теряет сессию примерно через час» — **неверно, и ровно тем классом, от которого предостерегает записка передачи: вывод из соседнего числа вместо проверки.** Час — это ПЕРИОДИЧНОСТЬ `SweepSessions`, а срок жизни сессии другой: `SessionIdleTTL` = **14 суток**, `SessionMaxAge` = **30** (`platform/internal/config/config.go:345-346`=`defaultSessionIdle`), причём окно бездействия скользит на любом аутентифицированном запросе (`platform/internal/auth/middleware.go:66`=`a.Sessions.Touch(r.Context(), digest`; поток `Touch` не зовёт — грепом 0, и это не важно при окне в две недели). Реальное следствие `PD-421` — то, что и записано в её теле: сессия, протухшая по бездействию И подметённая, гасит поток с опозданием до часа, то есть после ДВУХ НЕДЕЛЬ без единого действия. **Вопрос СНЯТ с листа владельца как несущественный; правка в паке P12 не нужна, строка остаётся `info`.** Владелец вопросом «ты уверен или придумываешь?» поймал ошибку до того, как она стала заказом на работу.
|
||||
> ⚠ **Эррата 29.08-б (D39.171 механизм cgroup + D39.172 число операторов) — ДВЕ ошибки ОРКЕСТРАТОРА №19.**
|
||||
> (а) **Механизм, который я объявил причиной неприменения `MemoryMax`, НЕВЕРЕН.** Я вывел «вызывающий
|
||||
> процесс обязан жить внутри `user@<uid>.service`» из пробы `systemd-run --user --scope` без
|
||||
|
|
@ -1654,7 +1655,7 @@ head-1 это семнадцать бюджетируемых операций,
|
|||
3. **После пополнения баланса прогон возобновляется ЯВНЫМ действием пользователя, а не сам.** Пункт «авто-резюм `paused`» висел в листе владельца с 08.08 в форме, умершей вместе с оконной моделью; зона записала вывод сама (`PLATFORM_DIRECTION.md`), владелец его подтвердил — **пункт снят с листа**, вывод зоны становится ратифицированным.
|
||||
4. **Фразы, которые видит пользователь (В-3 · К-6 · Приложение А), ДЕЛЕГИРОВАНЫ проекту** — слово: «оставляю проектирование фраз на вас, главное чтоб это было интернациональным». ⚠ Это не «свобода формулировки», а **инженерное требование**: фраза не может быть литералом ни в Go платформы, ни в TSX фронта — только данными, ключуемыми машинным кодом причины и локалью (механизм языков интерфейса уже построен, `ПТ-36`/`В-9`). Следствия: словарь фраз — носитель ДАННЫХ, один на продукт; `PD-246` (граница `attention`/`glance` — сегодня ДОГАДКА платформы по 15 причинам движка) закрывается вместе с ним, а не отдельно; строка **204** (движок не публикует причины флагов данными) становится его гейтом. Проектирование — оркестратор + зоны, подпись владельца больше не ожидается.
|
||||
5. **Осталось на владельце из платформенного листа — ОДИН пункт, и он переформулирован** (`PD-421`): держит ли ОТКРЫТЫЙ поток событий сессию живой. Владелец ответа не дал, попросив раскрыть предмет; вопрос переформулирован в терминах продукта и вынесен заново.
|
||||
6. ⚠ **Ключи провайдеров — развилка снята фактом, а не решением:** движок берёт их ДВУМЯ путями (`--keys-file` деплоя ПОБЕЖДАЕТ конвенционный `.env` рядом с `book.yaml` — `backend/cmd/tmctl/invocation.go:145`=`keys-file`), формат обоих — `KEY=VALUE`. Владелец 30.08 сообщил, что чинил ключи движка; **из этого следует, что холодный прогон движка (очередь №20 п.2) разблокирован, а живой прогон через API (п.3) — нет**: платформа читает СВОЙ путь (`TM_PLATFORM_ENGINE_KEYS_PATH`, `platform/internal/config/config.go:550`=`ENGINE_KEYS_PATH`), и по записи P9 живых ключей в нём не было. Лечение — операционное и $0: направить переменную платформы на уже заполненный файл (формат совпадает), проверять — прогоном, не чтением (гардрейл `.env` в силе, оркестратор файлов ключей не открывал).
|
||||
6. ⚠ **Ключи провайдеров — развилка снята фактом, а не решением:** движок берёт их ДВУМЯ путями (`--keys-file` деплоя ПОБЕЖДАЕТ конвенционный `.env` рядом с `book.yaml` — `backend/cmd/tmctl/invocation.go:145`=`keys-file`), формат обоих — `KEY=VALUE`. Владелец 30.08 сообщил, что чинил ключи движка; **из этого следует, что холодный прогон движка (очередь №20 п.2) разблокирован, а живой прогон через API (п.3) — нет**: платформа читает СВОЙ путь (`TM_PLATFORM_ENGINE_KEYS_PATH`, `platform/internal/config/config.go:551`=`ENGINE_KEYS_PATH`), и по записи P9 живых ключей в нём не было. Лечение — операционное и $0: направить переменную платформы на уже заполненный файл (формат совпадает), проверять — прогоном, не чтением (гардрейл `.env` в силе, оркестратор файлов ключей не открывал).
|
||||
|
||||
## D39.177 — ПЕРЕДАЧА РОЛИ ОРКЕСТРАТОРА №20 → №21: что смена приняла и построила, четыре моих ошибки (две поймал владелец) и очередь, сверенная деревом (31.08). ✅
|
||||
|
||||
|
|
@ -3178,3 +3179,23 @@ bought NOTHING». ⇒ **`tmctl manifest` есть НИЖНЯЯ граница,
|
|||
**8. Класс A заведён сознательно и объявлен; форма клейма о нуле уточнена.** У секции `consolidation` читателей на платформе нет. ⚠ Два честных прибора дали РАЗНОЕ: по Go-именам — 0 хитов при 183 `.go`, по JSON-именам — 2 при 200; оба хита открыты и оказались английской прозой в комментариях. ⇒ **ни один СЧЁТ на вопрос «есть ли читатель» не отвечает — отвечает только чтение хитов**, и заявляющий ноль обязан назвать прибор. Подтверждено платформенной стороной независимо: строгий декодер в зоне ровно один (`internal/httpapi/bank.go`) и на ДРУГОМ пути — тело запроса от клиента, где строгость требует канон; движковый артефакт разбирается простым `json.Unmarshal`, `tm-bank-v1` не бампнут.
|
||||
|
||||
**9. Границы вердикта — честно.** Полный каталог мутаций я НЕ гоняла: 65 записей и «0 выживших» — числа зоны, пере-считан только состав каталога (276 записей, 65 батарейных, 0 удалённых). Собственных посадок приёмка не делала; вместо них прочитан текст нового пина и голдена. `-race` не гонялся. Живого платного прогона в паке не было и не требовалось.
|
||||
|
||||
## D39.229 — АКТ: платформенный пак «РАЗРЕЗ ПРИЁМА ДО ГОТОВНОСТИ И ПРАВДА О СЕБЕ» ПРИНЯТ; потолок разрезов построен и честно назвал, чего НЕ ограничивает (08.09, оркестратор №23) ✅
|
||||
|
||||
**1. Что заландено.** `ddcbf0c`, 26 путей, всё в `platform/`. Синхронный вход разреза получил потолок (`internal/books/limit.go`, `x/sync/semaphore`); граница хвоста загрузки выведена из кода пути; рантбук назвал молчание маршрута числом; три места, где сбой был неотличим от нормы, разведены; шапка зонного журнала и три ряда регистра приведены к правде. **$0**, платных вызовов ноль.
|
||||
|
||||
**2. Числа пере-сняты МНОЮ, не приняты со слов.** `go test ./... -count=1` → **20 пакетов `ok` · 0 FAIL · EXIT=0**. Дерево — 26 позиций, **все** в `platform/`, вне зоны 0. `gofmt -l` пуст, индекс пуст. Регистр: **465 строк, открытых 109, major 1, minor 36, info 72** — совпало с числами зоны до единицы. ⚠ Полный `make check` со всеми четырьмя гейтами хоста гоняла ЗОНА (`MAKE-EXIT=0`, линтер 0 issues, 5 скипов с одним названным условием — отсутствует деплой-артефакт, которого нет в репозитории); я гоняла батарею без гейтов ⇒ её `EXIT=0` принят СО СЛОВ, мой подтверждает только негейтовую половину.
|
||||
|
||||
**3. ⭐ ПОТОЛОК НАЗВАЛ, ЧЕГО ОН НЕ ОГРАНИЧИВАЕТ, и это сильнее самого потолка.** `DefaultMaxCuts` взят из существующего носителя (`jobs.DefaultWorkers`), а не назван заново. Комментарий механизма сам объявляет границу: потолок держит РАЗРЕЗЫ на всех трёх путях (интейк · воркеры очереди · свип), но **НЕ** все процессы движка на хосте — материализатор и рекoнсайлер читают через тот же неограниченный `runner.readEngine`. ⇒ худший случай по числу процессов не равен потолку и не посчитан; остаток заведён строкой **364**, и намеренно в БЭКЛОГ, а не в регистр дефектов: это названная граница механизма, а не дефект поведения. ⚠ Довод к тому, что вопрос не косметический: разрез идёт голым `exec.CommandContext` без cgroup и `MemoryMax`, в отличие от прогонов.
|
||||
|
||||
**4. Приор оркестратора проверен зоной и подтверждён КОДОМ, а не принят.** Я писала, что ожидание внутри уже стоящего `CutBudget` к `UploadSettle` ничего не добавляет; зона проверила и встроила довод в сам механизм: разрез идёт на шаге прогулки загрузки, поэтому время ожидания — время, НЕ потраченное на движок, а не добавленное к хвосту. Требование «потолок конфигурируем» снято там же: конфигурируемо ЧИСЛО слотов, не время.
|
||||
|
||||
**5. ⛔ АДВЕРСАРИАЛЬНЫЙ ПРОХОД НАШЁЛ ВОСЕМЬ, ИЗ НИХ ШЕСТЬ — ДЕФЕКТЫ ЭТОГО ЖЕ ПАКА, ВСЕ НА ЗЕЛЁНОЙ БАТАРЕЕ.** Мёртвый ретрай под `MaxAttempts: 1` (книга ждала свип 20 минут) · слот, выигранный в конце бюджета, отдавал движку миллисекунды, а убитый процесс читался как отказ ДЕПЛОЯ и ТРАТИЛ попытку из бюджета, который после пяти удаляет файл пользователя · claim не отдавался при спетом хвосте · собственный тест трёх окон вакуумен для двух из трёх, а его комментарий утверждал обратное · мёртвый код отказа бута · сломанный этим же паком баннер расхождения версий. Норма, купленная этим замером, заландена отдельно (`c3039be`, блок 5 ролевого промта): работает НАПРАВЛЕНИЕ, а не факт прохода — «сделай самопроверку» есть дефектная строка промта.
|
||||
|
||||
**6. Девятая находка — класс, который не ловится НИ батареей, НИ мутацией.** Резерв был константой, а тестовый бюджет записи — полем; пакет `books` **зависал навсегда**. Зелёного вердикта не наступает, но и красного тоже: в CI это читается как «долго», а не «сломано». Назвал её только прогон с укороченным `-timeout` и чтение стека. Правило зоны: **число, которое фикстура умеет укорачивать, и число, выведенное из него, обязаны быть выведены ОДИНАКОВО** — константа рядом с полем совпадает в бою и расходится в тесте.
|
||||
|
||||
**7. Пред-решение оркестратора по инструменту отказа подтверждено отменённым.** §4.6 промта первой редакции заказывал новый КОРНЕВОЙ `code` — ломающее изменение; отозвано до выдачи (`D39.227` п.5). Зона проверила и пошла дальше: пункт закрыт ПО ПОСТРОЕНИЮ — обе причины отказа приёма уже едут перечислимыми в открытом словаре `errors[]`, таблица «код → фраза» у клиента есть, неисполнена только клиентская половина, а фронт заморожен.
|
||||
|
||||
**8. Второй вопрос зоны решён В ЕЁ ПОЛЬЗУ по замеру.** `ReasonHostAtCapacity` — константа, которая никогда не пишется в БД, оставлена рядом с пятью хранимыми. Проверено: словарь причин никто не перечисляет как множество, а различие уже несётся СТРУКТУРНО — пять хранимых суть псевдонимы словаря шва (`ingest.Reject*`), две новые — локальные литералы. ⇒ живой лжи нет, решение зоны верно.
|
||||
|
||||
**9. Границы вердикта — честно.** Полного `make check` с гейтами я не гоняла (см. п.2). Мутаций приёмка не сажала: 19 посадок за смену — числа зоны, одна выжила ВЕРНО (сайзинг, не свойство). Живого нагрузочного прогона потолка я не наблюдала — «N одновременных приёмов дают ровно M процессов» принято по тестам зоны, не по моему замеру.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
## 2. Деньги ДВИЖКА (зона `backend/`)
|
||||
|
||||
- **Леджер SQLite.** Таблица `spend`, две фигуры: `committed_usd` (потрачено, с сырым ответом провайдера) и `reserved_usd` (зарезервировано под летящий вызов). `Reserve` перед каждым платным вызовом сверяет `SUM(committed_usd + reserved_usd)` книги и дня с потолками (`backend/internal/store/ledger.go:44,58,63`=`func (s *Store) Reserve(`; Р7 — коммент `backend/internal/store/ledger.go:12`=`per-day (Р7); checked against`); `SettleWithCheckpoint` одной транзакцией конвертирует резервацию в committed и персистит ответ (`backend/internal/store/ledger.go:178`=`func (s *Store) SettleWithCheckpoint(`). ⚠ У ДВИЖКОВОГО `store.Store` метода `Settle` нет — он называется `SettleWithCheckpoint` (словарь кода: `backend/internal/store/ledger.go:11`=`Reserve/Settle/ReleaseReservation semantics`). ⚠ Не спутать с ПЛАТФОРМЕННЫМ `credits.Settle` (§3 п.8) — это другой `Store`. Суммарно по книге — `SpentUSD` (`backend/internal/store/ledger.go:392`=`SpentUSD reports (committed, reserved)`).
|
||||
- **Леджер SQLite.** Таблица `spend`, две фигуры: `committed_usd` (потрачено, с сырым ответом провайдера) и `reserved_usd` (зарезервировано под летящий вызов). `Reserve` перед каждым платным вызовом сверяет `SUM(committed_usd + reserved_usd)` книги и дня с потолками (`backend/internal/store/ledger.go:44,58,63`=`func (s *Store) Reserve(`; Р7 — коммент `backend/internal/store/ledger.go:12`=`per-day (Р7); checked against`); `SettleWithCheckpoint` одной транзакцией конвертирует резервацию в committed и персистит ответ (`backend/internal/store/ledger.go:178`=`func (s *Store) SettleWithCheckpoint(`). ⚠ У ДВИЖКОВОГО `store.Store` метода `Settle` нет — он называется `SettleWithCheckpoint` (словарь кода: `backend/internal/store/ledger.go:11`=`Reserve/Settle/ReleaseReservation semantics`). ⚠ Не спутать с ПЛАТФОРМЕННЫМ `credits.Settle` (§3 п.8) — это другой `Store`. Суммарно по книге — `SpentUSD` (`backend/internal/store/ledger.go:400`=`SpentUSD reports (committed, reserved)`).
|
||||
- **Гейт потолков — ПЕР-ВЫЗОВНЫЙ** (`Reserve` на каждый свежий attempt). На границе юнита сидел РЕПЭЙР-суб-бюджет — ужесточён до пер-вызовного с ценой вызова (строка 135 закрыта D39.131); эскалационный кап хоп НЕ прицениваает — перелёт ≤1 хопа, задокументирован и запинен (диспозиция D39.131 п.2д, реопен — живой инцидент). ⚠ **ТРЕТЬЕ семейство, которого перечень не знал (доп. ревизией 02.09): банк-роли несут СОБСТВЕННЫЕ КНИГО-ШИРОКИЕ бюджеты** — `gates.terminology.budget_usd` и `gates.terminology.classify_budget_usd`. Именно оно резало ОПЛАЧЕННУЮ работу на холодном прогоне 31.08 (D39.182 §4: инцидент был на классификаторе). С 31.08 (D39.182) план прохода режется ценой партии ДО первого вызова, а не обрывается посередине; усечение ВИДНО в отчёте — поля `BatchesDropped` и `ClassifyBatchesDropped` (`backend/internal/pipeline/terminologist.go`, греп `BatchesDropped`). ⚠⚠ **И сами цифры этих суб-бюджетов в книжных конфигах КАЛИБРОВАНЫ ПОД ИЮЛЬСКИЕ ЦЕНЫ** (тот же множитель ×4.47, D39.179 п.1): на холодном прогоне 31.08 `classify_budget_usd` 0.02 оборвал классификатор дважды, а поднятый до 0.08 `escalation.budget_usd` был пробит фактом до 0.103305. То есть суб-бюджеты режут ОПЛАЧЕННУЮ работу не по замыслу, а по протухшей калибровке.
|
||||
- **leftover-reserved зануляется write-open.** `store.Open` (путь записи, каждый `translate`) выполняет `recoverReservations` (`backend/internal/store/store.go:110`=`s.recoverReservations(ctx)`; сама функция — `backend/internal/store/store.go:278-279`=`UPDATE spend SET reserved_usd = 0`) — файл владеется одним процессом, значит любой reserved на открытии принадлежит несеттлённому прогону. `OpenReadOnly` этого прохода намеренно НЕ делает (`backend/internal/store/store.go:124`=`does not run that pass`) ⇒ **reserved, увиденный read-only `status` В МОМЕНТ СПАВНА, — остаток мёртвого процесса** (несущий факт формулы PD-158, см. §3). ⚠ Но НЕ «всегда»: `OpenReadOnly` построен ровно затем, чтобы `status` работал ВО ВРЕМЯ живого прогона (`backend/internal/store/store.go:122`=`allows concurrent readers while a writer is live`), и конкурентный `status` покажет ЖИВУЮ резервацию между `Reserve` и settle. Узко формулирует и сам код: «after a run crashes, reserved_usd stays non-zero until the next WRITE command» (`backend/internal/store/store.go:130`=`after a run crashes, reserved_usd stays non-zero`), и платформа — «at spawn there is no other writer … so anything reserved is by construction a leftover, never a live promise» (`platform/internal/runs/spawn.go`, греп `never a live promise`).
|
||||
- **`--max-units` — ОБЪЁМНЫЙ потолок прогона, ортогональный денежному** (D39.165 §1б, принят D39.170). Ограничивает не деньги, а РАБОТУ: не больше N выходных ЮНИТОВ (гранулярность `units_total` манифеста — та же, в которой платформа продаёт главы) возьмут СЛОТ гранта в этом прогоне; юниты, отданные за $0 (резюм, ре-пин), ретраи и эскалации внутри юнита потолок не тратят. ⚠ **«Слот» ≠ «оплата», и с 03.09 это РАЗНЫЕ числа** (пак «число согласия», строка бэклога 232): юнит, который прежний прогон НАЧАЛ и не отгрузил, дописывается ВНЕ гранта, поэтому грант N оплачивает ДО 2N выходных юнитов — замерено приёмкой на живом раннере (грант 2 → `Paid()=4`, шесть вызовов провайдера). Единственный денежный бонд здесь — `--ceiling-usd`. ⛔ **Семантика переноса НЕ ратифицирована — слово владельца 03.09 «подумаем на этот счёт»**, и до его решения читать это как замеренный факт, а не как норму. Принимает только `translate`. **Остановка по объёму — ЗАВЕРШЕНИЕ (exit 0), не пауза:** словарь кодов выхода не расширялся и нового значения `Finished.Outcome` тоже нет — ⚠ **но с 31.08 признак едет ЧИСЛАМИ в кадре `finished` шва, а не только прозой** (D39.181 п.2, закон раскрытия: прозаическая строка отчёта до потребителя потока не доезжала): носитель — `Finished.Volume`, леджер доставки. Различение при этом живёт и в отчёте прогона, и в логе; отчёт разводит ДОСТАВКУ и ПЕРЕ-ДЕЛКУ. Носитель — `backend/internal/pipeline/volume.go:13`=`the VOLUME ceiling — the run's second stop`; словарь флага дословно — `backend/cmd/tmctl/invocation.go:143`=`Stopping on it is a COMPLETION (exit 0), not a pause`. ⚠ Проводка в платформу ГЕЙЧЕНА (`PD-422`): единственный писатель признака движения банка — дверь правок, рост АВТО-банка от майнинга флага не ставит.
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
*Прецеденты:* потолок аргументом (D39.110 п.2б → `--ceiling-usd`, D39.122) · `--verify-bank`
|
||||
флагом (`platform/internal/runner/engine.go:116`=`func TranslateArgs(workdir string, verifyBank bool`) · дефолт `project_db` по конвенции каталога
|
||||
(`backend/internal/config/book.go:200`=`b.ProjectDB = filepath.Join(dir, b.BookID+".db")`) · конвенционное опциональное чтение `.auto-bank.yaml`
|
||||
(`backend/internal/pipeline/mining.go:667`=`.auto-bank.yaml`).
|
||||
(`backend/internal/pipeline/mining.go:674`=`.auto-bank.yaml`).
|
||||
|
||||
2. **Посреди прогона внутрь идёт ТОЛЬКО сигнал.** `SIGTERM` = «дочти чанк и отпусти лок»; всё
|
||||
остальное — на границах процессов. Арбитр — эксклюзивный flock проекта на всю жизнь прогона
|
||||
|
|
|
|||
|
|
@ -1,3 +1,10 @@
|
|||
> ⚠ **ОТРАБОТАН И ПРИНЯТ 08.09 — акт `D39.229`, лендинг `ddcbf0c` (26 путей, $0).**
|
||||
> Инструкции ниже НЕ исполняются: пак закрыт. Исход: синхронный вход разреза получил потолок, граница хвоста
|
||||
> выведена из кода, рантбук назвал молчание маршрута, шапка зонного журнала и три ряда регистра приведены к
|
||||
> правде. Пункт §4.6 закрыт ПО ПОСТРОЕНИЮ (причины уже едут перечислимыми; неисполнена клиентская половина,
|
||||
> фронт заморожен). Остаток потолка — строка **364**. Адверсариальный проход дал 8 находок, 6 из них дефекты
|
||||
> этого же пака на зелёной батарее; норма про НАПРАВЛЕНИЕ самопроверки заландена `c3039be`.
|
||||
|
||||
# Пак платформы: «РАЗРЕЗ ПРИЁМА ДО ГОТОВНОСТИ И ПРАВДА О СЕБЕ»
|
||||
|
||||
## 1. Какая проблема и что решит твой результат
|
||||
Loading…
Add table
Reference in a new issue