Issue the tmctl-migrate micro-prompt, re-zone backlog row 169 whose engine half already shipped, and sync money-path plus current-state with D39.131 closures

This commit is contained in:
heaven 2026-08-14 21:52:24 +03:00
parent 39d3a4bfba
commit e926919d47
4 changed files with 81 additions and 6 deletions

View file

@ -0,0 +1,75 @@
# Промт: бэкенд, малое касание — `tmctl migrate` (строка 174: деадлок деплоя v15)
> Выдан оркестратором №16 14.08.2026. Запуск — по слову владельца (запуск = ратификация
> варианта А строки 174). Лёгкий класс: короткий промт, инлайн-приёмка — но самопроверка
> исполнением обязательна, это путь у денег и данных.
## 0. Какую проблему решаем
Движок TextMachine — CLI-процесс (`tmctl`) со своим SQLite на книгу. Read-only команды
(`status`, `report`) требуют ТОЧНОГО совпадения версии схемы («schema vN … expects vM»,
`internal/store/store.go:135-143`) и мигрировать не вправе; мигрирует схему только
write-команда. Платформа (`platform/`) зовёт `tmctl status --json` ПЕРЕД каждым спавном прогона
и для расчёта денег. Следствие — **деадлок деплоя**: апгрейд бинаря движка запирает ВСЕ
существующие книги — status отказывает старой схеме, а write-команда, которая мигрировала бы,
не наступает никогда (строка 174 единого бэклога, найдена приёмкой D39.131). Прямо сейчас это
блокирует деплой свежезаленденного эмиттер-бинаря (D39.131) на стенд платформы.
Твой результат: **$0-команда `tmctl migrate`** — явный write-open книги без прогона. Платформа
вставит её деплой-шагом «стоп прогонов → migrate по каждой книге → новый бинарь в работу».
## 1. Онбординг
`CLAUDE.md` (корень; гардрейлы: зона записи ТОЛЬКО `backend/`, ты НЕ коммитишь, `.env` не
читать, чужие незакоммиченные файлы не трогать) → `backend/README.md`
`docs/architecture/12-go-style-notes.md` (норматив общности §0). Entry-points (код первичен):
`cmd/tmctl/main.go` (диспетчер команд), `internal/store/store.go` (`Open` — write-путь:
миграции + `recoverReservations`; `OpenReadOnly` — отказ по версии).
**Эхо-протокол:** ≤10 строк «что я понял» до работы.
## 2. Задача (делай РОВНО так по границам; форму внутри — реши сам и аргументируй)
`tmctl migrate --config <book.yaml>` (алиасы/форма флагов — как у соседних команд):
- Открывает проект write-путём (`store.Open`) — миграции применяются, `recoverReservations`
проходит, — печатает `schema vN -> vM` (или «already at vM») и выходит. Никаких LLM-вызовов,
сети, трат: $0-команда, как `manifest`/`status`.
- **Идемпотентна**: повторный вызов на свежей схеме — успех и no-op.
- Exit-коды — по свежей конвенции полосы отказов (D39.131: 10 конфиг · 12 лок · 19 безымянный);
успех 0. Не изобретай новых кодов.
- Тест: фикстура/БД старой версии → `migrate``OpenReadOnly`/`status` работает; лок занят →
exit 12; повторный вызов — no-op. Плюс дифф `^func Test` исполнением, не памятью.
## 3. Границы и известные мины (приоры — опровергаются замером)
- **Деньги:** `recoverReservations` обнуляет остаточный `reserved_usd` — на этом свойстве стоит
ратифицированная формула потолка платформы (PD-158: аргумент = committed + прирост, БЕЗ
reserved). `migrate` перед спавном делает `status` честнее, формулу не ломает — ПРОВЕРЬ это
утверждение по коду и НАЗОВИ в отчёте явно; расхождение = пинг, не тихий фикс.
- **Гейт `prices_checked` не должен убивать миграцию.** `LoadModels` жёстко отказывает конфигу
с ценами старше 120 дней (`internal/config/models.go:209-214`), и строка 146 единого бэклога
уже фиксирует: этот гейт стреляет на read-only/$0-путях, где перекупки нет. Если `migrate`
соберёшь поверх полного конфиг-стека, протухшие цены превратят $0-миграцию в отказ — и
деплой-деадлок вернётся ровно в той форме, которую команда лечит. Открывай store/книгу БЕЗ
валидации свежести цен (или обоснуй, почему она тут уместна) — и назови выбор в отчёте.
- **Строка 49а** (ALTER-шаги миграций v8v14 не идемпотентны на полу-применённой БД) — знать,
НЕ чинить этим касанием (отдельная строка); твоя команда не должна усугубить (никаких новых
ALTER, только вызов существующего механизма).
- Снапшоты/голдены/RequestHash не двигаются — команда не трогает промпты и провод; голден-батарея
обязана остаться бит-в-бит.
- Общность §0: ничего пар-/книго-специфичного.
## 4. Самопроверка и сдача
`cd backend && make battery` EXIT=0; самопроверка исполнением (живой прогон команды на копии
проектной БД двух версий — не чтением диффа); адверсариальная вычитка собственного диффа с
установкой опровергать (субагент разрешён явно); «заявление = команда». Отчёт короткий: что
построено · команды проверок · взаимодействие с PD-158 · чего не делал. Итог — пингом в
`docs/PROGRESS.md` секция «Бэкенд» — ТОЛЬКО append своей записи (файл держат параллельные
сессии: CURRENT-STATE и чужие секции не трогать, перед правкой `git status`); дерево НЕ
коммитить — лендит оркестратор.
## 5. Канал вопросов
Непонятно / конфликт промта с кодом → пинг оркестратору через владельца, НЕ интерпретация.

View file

@ -3,12 +3,12 @@
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-14, голова D39.131; приёмки S3.6/S3.7 — D39.127/129, приёмка P5 — D39.130, приёмка эмиттера — D39.131). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md.
> - **Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены**; лента, коммиты и разборы — D39.109123 (D-лог) и реестр нот `architecture/05-decisions-index.md`; снимок прежних бюллетеней этой шапки — архив-слайс `-08-02-04`.
> - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д ИДЁТ (заказ 10.08)**: промт `docs/POLYGON_EXP2223_REDO_SESSION_PROMPT.md` (staged полигоном), потолок фазы $4.50 словом владельца (ход — секция «Полигон» ниже); при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки (одобрены владельцем 10.08) · фронт: S3.5S3.7 ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.127/D39.129, лендинги `57e6bd1`/`3e465bd`), контракт **0.2.2** в каноне, i18n-механизм построен (ПТ-36 🔶) — **гейт S4 ПАЛ (P5 принят D39.130): S4-промт по слову владельца** (вход: экраны библиотеки/загрузки на живом `POST /books` · находки приёмки S3.7 · спек-правка 0.2.3) · **платформа P5 ИСПОЛНЕНА и ПРИНЯТА в три раунда (D39.130, `69d485a`)**: интейк книг `POST /books` с сентинелом хранилища · стоп/резюм с намерением в Postgres · Prometheus · Go-floor 1.26.6; развилка `book.yaml`: бета = форма Б (стройка следующим касанием зоны), движковая форма = строка 170 · **эмиттер ИСПОЛНЕН и ПРИНЯТ (D39.131, `9cfe080`, дофикс до лендинга)**: `events.jsonl` (StreamVersion 1.1) + exit 4 потолок / 5 graceful / полоса отказов 1019 + пер-вызовный репэйр-гейт; строки 103/135/165/102 закрыты; **движковая половина PD-113/PD-196 построена — остаток у ПЛАТФОРМЫ (П-15**: маппинг exit-кодов, `refusedTheSource` по коду, unit_done присваиванием, scope потолка**)**; ⚠ **деадлок деплоя v15 — строка 174, решить ДО деплоя нового бинаря на платформу** · эскроу (136) — следующим денежным промтом.
> - **Открыто на владельце:** Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S4-промта фронта / следующего платформенного касания (форма Б + П-15 половина шва) · **решение по строке 174 (деадлок деплоя v15 — до деплоя эмиттер-бинаря)** · **СТОП ja-оси фазы Д** (гардрейл 18+ на `isekai_majutsushi_jp`, 3 чанка из 184: выбросить помеченное или сменить книгу) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — PROGRESS «Полигон») · поле `title` в `BookIntake` (сегодня заголовок = имя загруженного файла; поле в форме = правка спеки, кандидат 0.2.3 — вопрос P5) · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · граница ПТ-33 для добавочных полей `BankTerm` (черновик S3.5/S3.6, D39.127 п.2б).
> - **Открыто на владельце:** Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S4-промта фронта / следующего платформенного касания (форма Б + П-15 половина шва) · **решение по строке 174 (деадлок деплоя v15 — до деплоя эмиттер-бинаря)** · **СТОП ja-оси фазы Д** (гардрейл 18+ на `isekai_majutsushi_jp`, 3 чанка из 184: выбросить помеченное или сменить книгу) · **возражение Sol по проходу `tier` эксп-23** (пере-судить починенным ригом или оставить с записанным возражением — PROGRESS «Полигон») · ~~поле `title` в `BookIntake`~~ РЕШЕНО 14.08: ратифицировано в 0.2.3 (замечание 12 S3.5, владелец подтвердил; исполняет S4) · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · граница ПТ-33 для добавочных полей `BankTerm` (черновик S3.5/S3.6, D39.127 п.2б).
> - **Сделано (сводно)** — снимок ленты закрытых эр в [archive/PROGRESS-2026-08-04-09.md](archive/PROGRESS-2026-08-04-09.md); детали — D-лог и слайсы.
> - **Курс:** ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.5978) → **ФРОНТ-ЭРА** (D39.81100: зоны живые, контракт API ратифицирован) → **шов/платформа/движковые блокеры построены** (D39.106123). Хвосты курса живут строками: 16 (edit-волна не гонялась НИ РАЗУ — держит и оси голоса 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 · веса K1K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 6268, 85) → Ф3 ридер-IDE (6971). **Стоячие:** 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.08 (сняты 14.08, строка 172):** цены deepseek с 16.08 16:00 UTC ×2.34.7 (пик/офф-пик; пик 0104·0610 UTC), у pro эффорт стал настраиваемым low/high/max (квирк 3а устарел — вахта §Б-108 сработала); покупки фазы Д на deepseek до 16.08 идут по старым ценам. ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 14.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **135** строк · зона бэкенд **67** строго / **92** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **31** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 14.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **135** строк · зона бэкенд **67** строго / **91** широко (169 пере-зонирована 14.08: движковая половина построена D39.122) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **31** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 1116, rerun2) · **`-25-31` (паки 1720 · мини-прогон · полигон-пакеты 58 · ToS · холодный прогон; D39.2658)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.5990, срез D39.105)** · **`-08-02-04` (сессии №11№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91105 + снимок шапки эры №15)**. Записи ниже — живой хвост (№14+, эра D39.106+).
## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
@ -112,7 +112,7 @@
| 166 | **Движковая поверхность оценки $/глава** (ставка-константа платформы $0.03 из exp08 v2 — временная мера беты, П-10 зоны платформы; честная оценка по книге/паре — движковая) | бэкенд | когда-нибудь | отдельный пак | D39.123 |
| 167 | **Докс-пак по аудиту D39.125 — ЯДРО ИСПОЛНЕНО (D39.126):** реестр всех нот `architecture/05-decisions-index.md` · counts.py `--check` полнота реестра + `--lint` якорей · разгрузка топ-10 строк · входы 15-money-path/16-events-emitter/STACK.md · К-статусы сведены · 09-target/product-requirements освежены. **Остаток строки:** статус-баннеры экспов + шапка эндпоинтов quirks (передано полигону промтом фазы Д, §Д8 п.12) · DEFECT_REGISTER секциями (зона платформы, пинг отправлен 09.08) | доки/полигон/платформа | скоро (остаток — фаза Д полигона) | пинги зонам | D39.125, **D39.126** |
| 168 | **Состав волн пайплайна = пар-конфиг (данные), не общий хардкод**: вопрос владельца 10.08 «нормально ли под китайский строить весь бэкенд и конфиги?» — жильцы ролей и промпты уже конфиг/langpacks, но ТОПОЛОГИЯ волн (перепис · точечный edit-контур · без второго прохода) одна на всех пар; если фаза Д покажет разных победителей по парам (H-3/H-4: en-черновик+edit против zh-связки), состав волн уезжает в пар-конфиг данными; ревью-вопрос общности §0 `12-go-style-notes.md` | бэкенд | когда-нибудь (после данных фазы Д) | замер (фаза Д) → решение владельца → малое касание | слово владельца 10.08, промт фазы Д |
| 169 | **Экспорт банка для чтения фронтом** — канала под `GET /books/{id}/bank` нет ВООБЩЕ: банк живёт в приватном SQLite движка, платформе читать его запрещено (D39.85), артефакта экспорта нет (строка 101 дала таблицу подписи, не банк); нужен движковый артефакт экспорта (машиночитаемый, по образцу стоп-таблицы `tm-bank-stop-v1`) + проекция платформы; без него витрина банка стоит на моке, а подписной экран S5 фронта строить не на чем | бэкенд → платформа | скоро (гейт S5 фронта) | отдельное решение → пак | Ф-43 фронта, компаньон контракта §3, **D39.127** |
| 169 | **Экспорт банка для чтения фронтом — ДВИЖКОВАЯ половина ПОСТРОЕНА, строка заводилась слепой к ней (испр. оркестратором 14.08):** сайдкар `<project_db>.bank.json` — весь банк тремя статусами, стабильные id, атомарная запись — существует с D39.122 (`internal/pipeline/bankexport.go`; рядом `bank-stop.json` — полная таблица подписи для S5); прежний текст строки («артефакта экспорта нет») повторял жалобу Ф-43, снятую тем паком. ОСТАТОК: платформенная проекция сайдкаров в `GET /books/{id}/bank` + канал решений подписи — пак читающей поверхности платформы; без неё витрина банка фронта стоит на моке, подписной экран S5 строить не на чем | платформа | скоро (гейт S5 фронта) | пак читающей поверхности (П-1) | Ф-43 фронта, D39.122, **D39.127**, испр. 14.08 |
| 170 | **`tmctl init` — движок сам заводит книгу** (форма В развилки интейка): платформа зовёт $0-команду, движок пишет СВОЙ `book.yaml` — требования к полям живут там же, где проверяются (`config/book.go`); до неё бета живёт формой Б (рендер из деплой-шаблона платформой при создании книги, ратификация D39.130) | бэкенд | когда-нибудь (после беты формы Б) | малый пак | приёмка P5, **D39.130** |
| 172 | **Пере-пин цен DeepSeek + решение time-based прайсинга** (вендор-факт 13.08, снят 14.08 с `api-docs.deepseek.com/quick_start/pricing`+news260813): с 16.08 16:00 UTC пик/офф-пик (пик 0104·0610 UTC, офф-пик = 50%): пик flash $0.44/$1.32 in/out (было $0.14/$0.28), pro $1.32/$3.96 (было $0.435/$0.87), cache-hit pro $0.0220.044 против $0.003625 (×612); наша таблица `models.yaml` (факт 2026-07-10) протухает 16.08, схема прайсинга плоская — time-based не выражает. Делать: пере-пин цен + `prices_checked` + СТОП-решение владельца «как леджеру жить с пик/офф-пик» (консервативный пин пиком против офф-пик+scheduler строки 60 — её ценность выросла до ×2 COGS) + пере-калибровка ставки $0.03/глава (166/П-10) + exp08 v3 (85) из опции стал обязателен до budget_usd | владелец → бэкенд | **скоро (цены протухают 16.08)** | СТОП-решение → правка данных + exp08 v3 | вендор 13.08, строка 60, D30.4 |
| 171 | **Число символов книги — от движка** (PD-177 платформы: `character_count` интейка точен только для UTF-8; GB18030/UTF-16 движок декодирует сам — цифра платформы на них неверна, для UTF-16 занижена ~вдвое): счёт символов в манифест (рядом `source_bytes`/`encoding`) либо перерасчёт платформой после разбора | бэкенд | когда-нибудь | малое касание (манифест) | П-13 платформы, PD-177, приёмка P5 |

View file

@ -17,7 +17,7 @@
- `research/` — фактура ресёрчей 0127; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа (транспорт superseded D39.106) · 25 холодное ревью шва — форма D39.106, отвергнутые альтернативы, требования к эмиттеру (читать перед любым кодом стыка) · 24 арбитраж банка (ПРИНЯТ D39.102: консилиум закрыт классом, вход фикс-пака банка — §G) · 26 официальные практики Anthropic (D39.121: записка-план, сниппеты хендоффов, карта «уже делаем/перенять»).
- [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений.
- `scripts/counts.py`**производные числа доков считаются им, а не руками** (голова по трём носителям · счёт очереди и зон · вес открытых строк регистра платформы · полнота реестра нот); `--check` даёт ненулевой код на расхождении; `--lint` — линтер file:line-якорей живых доков (D39.126). Его же зовёт зонный хук `scripts/githooks/pre-commit` при коммите, задевающем D-лог или PROGRESS — предупреждает, не блокирует. Заведено по D39.112 п.5б: голова отставала трижды у трёх разных оркестраторов.
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: [../frontend/docs/S4_SESSION_PROMPT.md](../frontend/docs/S4_SESSION_PROMPT.md)** — S4 выдан 14.08 (гейт пал D39.130, запуск одобрен владельцем: библиотека/загрузка/прогресс + спек-правка 0.2.3). Активных промтов бэкенда/платформы НЕТ: эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве); платформе — П-14 + П-15 (половина шва) следующим касанием. Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100).
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: [../frontend/docs/S4_SESSION_PROMPT.md](../frontend/docs/S4_SESSION_PROMPT.md)** — S4 выдан 14.08 (гейт пал D39.130, запуск одобрен владельцем: библиотека/загрузка/прогресс + спек-правка 0.2.3) · **Платформа: [../platform/docs/PLATFORM_P6_SESSION_PROMPT.md](../platform/docs/PLATFORM_P6_SESSION_PROMPT.md)** — P6 выдан 14.08 (П-15 половина шва эмиттера + П-14 форма Б + П-16 дев-сид + деплой-порядок v15; курс владельца: платформа достраивается целиком до фронта) · **Бэкенд: [BACKEND_MIGRATE_SESSION_PROMPT.md](BACKEND_MIGRATE_SESSION_PROMPT.md)** — малое касание `tmctl migrate` (строка 174, вариант А; запуск = ратификация). Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве). Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100).
- Зоны фронта (чужие, читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: промт фронт-сессий S0S7 + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки, сверены с вебом 02.08) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README + [BACKLOG.md](../platform/BACKLOG.md) (П-1..П-14) + `docs/` (зонный журнал `platform-PROGRESS.md` · регистр дефектов · архив промтов P0P5).
- `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять.
- Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code).

View file

@ -37,7 +37,7 @@
| Дыра | Носитель |
|---|---|
| **PD-113 (major)** — стоп по потолку неотличим от аварии. **Движковая половина ПОСТРОЕНА D39.131**: событие `ceiling{scope}` + exit 4; остаток у ПЛАТФОРМЫ (П-15): outcome() знает только 0/2/3 и читает `paused_reason` из stale-снапшота до drain — до её стройки exit 4 всё ещё материализуется как `failed` | `platform/docs/DEFECT_REGISTER.md:18`, D39.131 |
| **Строка 165** — различимые exit-коды tmctl (потолок vs graceful-stop; сегодня оба = 1), «скоро, вместе с эмиттером» | `docs/PROGRESS.md:113` |
| ~~Строка 165~~ **ЗАКРЫТА D39.131** (испр. оркестратором 14.08): exit 4 = потолок · 5 = graceful stop · 1019 полоса отказов; потребительская половина у платформы = П-15 (до неё exit 4 материализуется `failed` — PD-113) | D39.131, `platform/BACKLOG.md` П-15 |
| **Строка 166** — движковая поверхность оценки $/глава; $0.03 — временная мера беты (П-10 зоны) | `docs/PROGRESS.md:114` |
| **PD-104** — фри-тир: док↔код закрыто, продуктовая половина (ноль на бете · агрегатный потолок · счётчик) на владельце | `DEFECT_REGISTER.md:115`, D39.110 п.3 |
| **Строка 78** — леджер = нижняя граница (биллящийся decode-fail мимо request_log, ≤13% захода на ре-пробе) | `docs/PROGRESS.md:41` |
@ -56,6 +56,6 @@
| Код денег платформы | `platform/internal/pgstore/credits.go` · `pgstore/runs.go` · `runs/spawn.go` · `runs/reconcile.go` · `pricing/pricing.go` |
| Код денег движка | `backend/internal/store/ledger.go` · `store/store.go` · `pipeline/stagerun.go` · `pipeline/status.go` · `config/book.go` |
| Дефекты денег | `platform/docs/DEFECT_REGISTER.md` (PD-104·113·144·157·158·159) |
| Бэклог-строки | `docs/PROGRESS.md` строки 78 · 135 · 136 · 137 · 165 · 166 |
| Бэклог-строки | `docs/PROGRESS.md` строки 78 · 136 · 137 · 166 (135 и 165 закрыты D39.131) |
| Контракт наружу | `14-api-contract/openapi.yaml` (`CeilingBounds`, `Usage`); ПТ-35 |
| Запрет денег на экране | D39.84; D39.100/К-8; ПТ-35 |