Ratify frontend S3.6 acceptance as D39.127 and log corpus reread as D39.128: bank export row 169, PT-36 registered, emitter prompt issued for rows 103 135 165

This commit is contained in:
heaven 2026-08-10 23:53:14 +03:00
parent 7f3798db0f
commit cedd150f0d
5 changed files with 187 additions and 5 deletions

View file

@ -0,0 +1,160 @@
# Промт: бэкенд-сессия «эмиттер шва» — строки 103 + 135 + 165 (события `events.jsonl` + деньги шва)
Ты — бэкенд-сессия TextMachine. Зона записи — **только `backend/`**; сессия НЕ коммитит — дерево
готовит и передаёт на лендинг оркестратору. Онбординг по `CLAUDE.md` обязателен (там же гардрейлы:
`.env` не читать, git-нормы, запрет подгонки тестов). В дереве живут незакоммиченные файлы ЧУЖИХ
зон — полигон (`eval/*`, `docs/experiments/*`, у него прямо сейчас ЖИВОЙ ПЛАТНЫЙ прогон: ничего
в `eval/` и `~/books/` не запускать, замки не трогать) и, возможно, фронт (`frontend/*`).
Начни с `git status` и опознай чужое; чужие зоны не трогать и не «прибирать».
Пинги и итоги — `docs/PROGRESS.md`, секция «Бэкенд», ТОЛЬКО append своей секции
(CURRENT-STATE не касаться — файл держат параллельные сессии). Пак **$0**: ни одного платного
вызова провайдеров; всё на фикстурах и фейках.
> **Онбординг-блок (проблема, которую решаем).** Движок и платформа разведены швом: движок —
> транзиентный systemd-юнит на прогон, платформа спавнит его и читает события. Платформенная
> сторона шва ПОСТРОЕНА и залендена (P4, D39.123): тейлер `events.jsonl` с курсором
> `(engine_run_id, seq)`, декодер словаря, реконсилятор, карантин проекции — всё это ЖДЁТ файла,
> который движок ещё не пишет (`platform/internal/ingest/tail.go:16-17` «the engine's event
> journal, in the BOOK's directory»; `ErrNoJournal` не ошибка — тейлер спокойно ждёт). Пока файла
> нет, платформа живёт на редком `status --json`-резюнке (5 минут, каждый вызов = секунды CPU
> пере-ингеста), а стоп по потолку неотличим от аварии: движок отдаёт потолок ошибкой
> (`errReserveCeiling`), exit-код мапит всё в 1, и платформа честно ставит `failed` там, где
> контракт требует `paused` — это **PD-113, единственный открытый major платформы**, и цена его
> выросла после PD-158 (потолок платформы выставляется впритык к холду, стоп по потолку = ровно
> исчерпание холда). Эта сессия строит движковую сторону: эмиттер журнала (строка 103),
> различимые exit-коды (строка 165) и гейт потолка пер-вызов (строка 135).
## Обязательное чтение до кода (порядок; НЕ грепать — читать)
1. **`docs/architecture/16-events-emitter.md` ЦЕЛИКОМ** — сборка-норматив этого пака: там
ратифицированная форма, контракт декодера, деньги, открытые развилки (§5), чек-лист входного
чтения (§6 — исполнить ВСЕ 14 позиций, включая PD-строки реестра платформы и код читателя)
и оговорки сборки (§7). При конфликте нормдока с D-логом побеждает D-лог.
2. `docs/research/25-seam-cold-review.md` — механизмы и отвергнутые альтернативы («чтобы
отвергнутое не вернулось»); `docs/architecture/15-money-path.md` — деньги от гранта до settle.
3. D-ноты: D39.106 (форма шва) · D39.119 п.3 (at-least-once) · D39.122 п.2(б,в) (`done` счётчиков,
семантика `--ceiling-usd`) · D39.123 п.2(б,в,ж) (PD-158, карантин ПРОЕКЦИИ, цена PD-113) —
живой файл `docs/architecture/05-decisions-log.md`, греп номера.
4. Код читателя (чужая зона `platform/` — ЧИТАТЬ можно и нужно, писать НЕЛЬЗЯ):
`platform/internal/ingest/events.go` (словарь-предложение) · `decoder.go` · `tail.go`.
5. Своя сторона: `backend/internal/obs/logging.go:15-54` · `backend/internal/pipeline/stagerun.go`
(потолок/деньги, unit-done) · `backend/internal/store/` (транзакции чекпойнтов, леджер) ·
`backend/cmd/tmctl/main.go:30-52` (exit-контракт) · `backend/README.md` ·
`docs/architecture/12-go-style-notes.md` §0 (норматив общности).
По всем задачам — прогон в отчёте; **молча пропустить задачу нельзя**: сделано / диспозиция
с обоснованием / вопрос пингом.
## Задачи
### 1. Дизайн-развилки — решить и ЗАПИСАТЬ до кода
Все четыре названы нормдоком §5/§7; каждую решить с обоснованием в отчёте (форма — решение +
отвергнутые варианты + почему):
- **Формат журнала:** одиночный JSONL против пофайловых событий / CRC-фрейминга. ⚠ Читатель
платформы уже построен под одиночный `events.jsonl`; выбор другой формы = согласованное
изменение ОБЕИХ сторон — только пингом через оркестратора, не молча.
- **Политика «журнал не пишется»** (PD-60): fsync-политика, ENOSPC, заполненный диск — блокировать
прогон или деградировать с громким флагом; «обе позиции законны, молчаливой третьей нет».
- **fsync каталога** при append/rename на ext4 (durability, NOTE D39.122).
- **Как «строка события в той же SQLite-транзакции, что чекпойнт» ложится на текущие транзакции
`internal/store`** — это ратифицированная ФОРМУЛА (outbox, не вторая запись), не факт кода;
первая проектная работа сессии (нормдок §7 п.2).
### 2. Эмиттер `events.jsonl` (строка 103)
- `hello` первой строкой процесса: `seq=1`, `stream_version`, `engine_run_id`, `book_id`,
`chunker_version`; версионирование по правилу terraform (минор = ignore-unknown, мажор =
reject). Резюм — НОВЫЙ процесс: дописывает второй `hello` в тот же файл, свой `engine_run_id`,
`seq` заново с 1 (контракт читателя: `events.go:62-70`, `tail.go:58-60`).
- Плотный `seq` без дыр; **строка повторима байт-в-байт** (читатель сверяет дубли по sha256 сырой
строки — пере-генерация с другим timestamp = `ErrPayloadConflict` = карантин проекции).
- Словарь событий: `progress` (пофазные draft/edit, семантика `done` = «разрешено волной») ·
`unit_done` · `bank_stop` (`terms_proposed`; полная таблица — артефактом, не потоком) ·
`ceiling` · `spend` · `finished`. Форма `events.go` — **ПРЕДЛОЖЕНИЕ платформы, записанное
кодом**, «so the engine zone can answer it with a diff»: движок вправе ответить диффом
(состав полей, `eta_seconds`, доп-события), расхождения — пингом в отчёте, не молча.
⚠ research/23 §2 со словарём НЕ сверялся (нормдок §7 п.1) — свериться при дизайне.
- Деньги: только внутри `spend`, **кумулятивно, целыми micro-USD** (никаких float/строковых форм —
урок PD-79); enforcement на событиях запрещён (доккоммент `Spend`); в INFO-логи и argv деньги
и book id не текут (PD-99, D39.84).
- **Сброс буфера на всех путях выхода** (PD-61а): `os.Exit`/`log.Fatal` пропускают defer —
финальные события (`finished`, `ceiling`) теряться не должны; краш-пути перечислить и покрыть.
- Человеческие логи остаются на stderr как есть; эмиттер их не заменяет и не парсит.
### 3. Событие потолка + различимые exit-коды (строка 165, закрывает PD-113)
- `ceiling` — ФАКТ без цифр (деньги не выходят из движка нигде, кроме `spend`); эмитится на
`errReserveCeiling`-стопе (сейчас деньги только в тексте ошибки `stagerun.go:494-513`).
- Новые exit-коды tmctl: потолочная остановка и graceful stop (SIGTERM пойман, `NotifyContext`)
обязаны стать различимы между собой и от infra-failure; 0/2/3 заняты (clean ·
completed-with-flags · банк-стоп) — выбрать значения, внести в shell-контракт `main.go`
и задокументировать. Помнить PD-152 платформы: сегодня пойманный SIGTERM выходит кодом 1,
и ExecStopPost-маркер честно пишет `exited/1``failed`.
- День-потолок (`day_usd` из book.yaml) останавливает прогон невидимо для платформы (PD-157) —
реши дёшево: причина потолка (book/day) внутри события `ceiling` либо диспозиция «не сейчас»
с обоснованием.
### 4. Гейт потолка на каждый платный вызов (строка 135)
Сначала выясни фактическую границу по коду: `docs/architecture/15-money-path.md` §2 пп.12 на
поверхности расходятся («Reserve перед каждым платным вызовом сверяет потолки», `ledger.go:44,58,63`
— против «гейт сегодня на границе юнита работы, ужесточение — строка 135»). Разбери, что именно
проверяется и когда останавливается (`stagerun.go:479-511`), и ужесточи до пер-вызовного гейта по
дизайну research/25 §Деньги. Границу «было/стало» записать в отчёт числом и сценарием.
⚠ Потолки — wiring, не семантика: `Ceilings` вне `BriefHash` (`book.go:262-265`) — снапшот,
ре-билл и голден двигаться НЕ должны; это же относится ко всему паку (см. приёмку).
### 5. Дешёвый довесок, только если ложится чисто: внешний trace-контекст (строка 102)
`TraceID` минтится заново каждым вызовом (`cmd/tmctl/main.go:67-70`), а прогон, запущенный
платформой, должен быть одной трассой; `engine_run_id` из `hello` — родня этой темы. Если приём
внешнего trace-id (флаг/ENV) ложится единичным касанием — взять; если тянет рефакторинг —
диспозиция «не в этом паке», строка 102 остаётся.
## Что НЕ делать
- Эскроу/`uncertain`/`closing` (строка 136), ночная сверка с провайдером (137), money-путь
BilledDecodeFails (78), оценка $/глава (166) — чужие паки.
- Реконсилятор, пиннинг бинаря, тейлер, декодер — построены платформой; её зону НЕ править
(словарь согласуется диффом-предложением в отчёте + пингом).
- Никакого HTTP/сервера в движке (D39.81); живой SQLite наружу не отдавать; stdout-дисциплину
не ломать.
- Пар- и книго-специфики в событиях НЕТ (общность §0.1: ревью-вопрос «заработает ли пара,
которой в репо нет, без правки Go» — обязан отвечаться «да» и для событий).
- Тесты, голден и гейты не подгонять под зелень (D39.121); несогласие с тестом — вопрос
оркестратору пингом.
- `git add`/`git commit` не делать — дерево передаётся на лендинг как есть.
## Отчёт и приёмка
- **Батарея зоны целиком EXIT=0** (включая `-race`); счётчик тестов вырос, удалённых ноль.
- Тесты пака, каждый падает на до-фиксном/сломанном коде: транзакционность outbox
(**crash-тест: kill -9 посреди волны → журнал без дыр и расхождений с SQLite**, догоняется
честно) · плотность seq и hello-первый · байт-повторимость строки при реплее · сброс буфера
на аварийном выходе · событие потолка на живом стопе по потолку (фикстурные цены) ·
новые exit-коды живым бинарём (SIGTERM и потолок).
- **Сквозная проба с настоящим читателем:** скормить свой `events.jsonl` реальному
декодеру/тейлеру платформы — go test в КОПИИ зоны `platform/` ВНЕ рабочего дерева (норма
D22 п.10: transient-прогоны в чужой зоне — только в копии); hello/seq/типы принимаются,
подделка payload на том же seq даёт `ErrPayloadConflict`.
- **Голден/снапшот-нейтральность доказать**: дифф голдена пуст, `RequestHash`/снапшот/подпись
банка не двинулись — эмиттер это наблюдаемость, не семантика.
- **Мандат самопроверки:** ревью ИСПОЛНЕНИЕМ своего кода и своих проб + адверсариальное ревью
диффа (author≠reviewer) в конце; находки с диспозициями — в отчёт. После тяжёлого ревью —
записка-план «ID находки → статус → улика» и движение по ней (D39.121).
- **Предметные оси самопроверки** (D39.120): (1) общность §0.1 — события без пар-ветвлений;
(2) деньги и детерминизм — события не двигают хеши/снапшот, повторимы, целочисленны;
(3) транзакционная целостность outbox — перечислить craш-точки и показать покрытие каждой.
- Клеймы прогресса грунтовать исполнением (число = команда рядом); перед сдачей перечитай
последний абзац отчёта — обещаний «сделаю» в нём быть не должно; комплектность против этого
промта — механически, пункт за пунктом.
- **Канал вопросов — пинг в секцию «Бэкенд», и у сессии есть право оспорить ПОСЫЛКУ** (D39.47
п.4): замер или чтение кода, бьющие по основанию задачи (не по исполнению), обязывают
остановиться и поднять вопрос — а не выдать формально требуемый артефакт; тихая интерпретация
запрещена.
- **Самоверификация интервально, не одним прогоном в конце:** после каждой задачи — сверка
с промтом и прогон батареи; красное чинится до перехода к следующей.
- Отчёт: дизайн-решения §1 · дифф словаря против `events.go` · таблица задач · пинг в
`docs/PROGRESS.md` секцию «Бэкенд». Хендофф-артефакты — только durable-пути, не scratchpad.

View file

@ -1,14 +1,14 @@
# Журнал прогресса
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-09, голова D39.126; хендофф №15→№16 — D39.124/125, докс-пак 167 исполнен — D39.126). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md.
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-10, голова D39.128; хендофф №15→№16 — D39.124/125, приёмка фронта S3.6 — D39.127, промты эмиттера и P5 — D39.128). Оркестраторов ДВА (решение владельца 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 признал постановку неполной), **фаза Д заказана**: промт `docs/POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, запуск по слову владельца (санкция потолка $10.00 при запуске) · фронт: список претензий владельца ПРИШЁЛ 09.08 (24 замечания) — промт S3.5 ВЫДАН (`frontend/docs/S35_SESSION_PROMPT.md`), запуск по слову владельца, S4 гейчен до приёмки S3.5 (D39.119 п.4) · активных промтов бэкенда/платформы НЕТ — следующие по слову владельца: **эмиттер** (103 + деньги шва; сессии перед стартом читать PD-95/105/79/99/107/60/61 + D39.106 + строку 165) · **платформа**: стоп/резюм-ручки + эскроу (136).
> - **Открыто на владельце:** запуск фазы Д полигона (слово + санкция потолка $10.00) · Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S3.5/эмиттера/следующего платформенного пака.
> - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д заказана**: промт `docs/POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, запуск по слову владельца (санкция потолка $10.00 при запуске) · фронт: S3.5+S3.6 (24 замечания + второй круг) ИСПОЛНЕНЫ, приёмка D39.127, дерево залендено `57e6bd1` — промт S3.7 «долги слоя данных» ВЫДАН (`frontend/docs/S37_SESSION_PROMPT.md`), запуск по слову владельца; S4 после приёмки S3.7 · промты бэкенда/платформы ВЫДАНЫ 10.08 (D39.128, после полного пере-чтения корпуса по заказу владельца): **эмиттер** (`docs/BACKEND_EMITTER_SESSION_PROMPT.md` — строки 103+135+165, закрывает PD-113; вход = `16-events-emitter.md` целиком) · **платформа P5** (`platform/docs/PLATFORM_P5_SESSION_PROMPT.md` — П-9 `POST /books`+PD-72 · стоп/резюм PD-140 · наблюдаемость П-11+PD-114); запуск обоих — по слову владельца, параллельность легальна; эскроу (136) — следующим денежным промтом.
> - **Открыто на владельце:** запуск фазы Д полигона (слово + санкция потолка $10.00) · Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S3.7/эмиттера/следующего платформенного пака · фронт-вопросы зонного журнала: В-7 (плотность интерфейса) · В-8 (слово состояния в дереве) · Ф-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, пере-калибровка при следующем платном прогоне). ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 10.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **133** строки · зона бэкенд **68** строго / **90** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **32** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 10.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **134** строки · зона бэкенд **68** строго / **91** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **33** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора)
@ -114,6 +114,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** |
| 49 | **Этапы Б+В спеки D15.2** (content-addressed resume / `guard_hash` — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (`repin.go`/`rebill.go`, D39.42 п.5/D39.45) | бэкенд | скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) | отдельное решение (annot-половина — по контракту 14, D39.99) | D39.34(4), D33 п.5, D39.81 |
| 49а | **ALTER-шаги миграций v8v14 не идемпотентны вопреки шапке `migrate.go:9-11`** (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 | бэкенд | когда-нибудь | отдельное решение | D39.56, PACK19_BUILD §6.9 |
| 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) |

View file

@ -179,3 +179,5 @@
| D39.124 | 09.08 | Закрытие сессии №15, передача №16: семь приёмок эры закрыты (D39.109123); докс-диета — хроники в архив-слайсы, зонный журнал платформы 1856→630 строк, CURRENT-STATE пересобран | закрыт (исполнен); очередь №16 дополнена D39.125 п.4 (докс-пак 167 первой задачей) | жив | процесс |
| D39.125 | 09.08 | Докс-диета по аудиту: D-лог слайсирован в 5 архив-слайсов (961→323 КБ), PROGRESS 42%, факты-против-кода исправлены (эррата D39.111); нормы формы доков; остаток аудита = строка 167 | ЖИВОЕ: правило чтения D-лога (карта+эрраты+живые тела+голова D39.106+, греп живой файл → слайсы) + нормы формы | жив | процесс |
| D39.126 | 09.08 | Докс-пак 167 исполнен: реестр всех нот (этот файл) · counts --check полнота реестра + --lint якорей · разгрузка топ-10 строк бэклога · топикальные входы 15-money-path/16-events-emitter/STACK · К-статусы компаньона сведены | ЖИВОЕ | жив | процесс |
| D39.127 | 10.08 | Приёмка фронта S3.6 принята и залендена (57e6bd1): гейты пере-прогнаны исполнением, 12 находок ревью → промт S3.7; Ф-47 ратифицирован (sense обязателен, спека 0.2.2); строка 169 — экспорт банка | ЖИВОЕ: S3.7 выдан (запуск по слову владельца), S4 после его приёмки; канон sense — диффом при лендинге S3.7 | жив | фронт контракт |
| D39.128 | 10.08 | Полное пере-чтение корпуса по заказу владельца; выданы промты: бэкенд-эмиттер (103+135+165, PD-113) и платформа P5 (П-9/PD-72 + PD-140 + П-11/PD-114) | ЖИВОЕ: запуск обоих по слову владельца; развилка book.yaml при интейке гейчена ратификацией | жив | шов деньги платформа процесс |

View file

@ -1,4 +1,4 @@
# Журнал решений оркестратора — контракт D1D39.126 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
# Журнал решений оркестратора — контракт D1D39.128 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `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 живёт ниже в этом файле (голова D39.106+).
@ -457,3 +457,21 @@
**3. Строка 167 пере-скоуплена в остаток:** статус-баннеры экспов + шапка эндпоинтов quirks (полигон, при лендинге эксп-22) · DEFECT_REGISTER секциями (зона платформы, пинг отправлен). Счёт очереди не меняется (09.08.2026, оркестратор №16). ✅
## D39.127 — ПРИЁМКА ФРОНТА S3.6 ПРИНЯТА И ЗАЛЕНДЕНА (`57e6bd1`); промт S3.7 выдан; Ф-47 ратифицирован (`sense` обязателен); строка 169 — экспорт банка (10.08). ✅
**1. Приёмка (оркестратор №16; воркфлоу 12 агентов: 6 линз + скептики-верификаторы, author≠reviewer).** Гейты пере-прогнаны ИСПОЛНЕНИЕМ: `check:full` EXIT=0 · vitest 160 · `shot` ×3 · сценарии зелёные; десять ключевых клеймов записи S3.6 подтверждены кодом. **12 находок CONFIRMED (1 high: замер ширин таблицы банка молча проваливается в скрытой keep-alive вкладке и не повторяется при показе — `frontend/src/ui/Table.tsx:232`), 24 минорных, 1 опровергнута** — все переданы промтом S3.7 §8. Нарратив и поправки к записи S3.6 (ложный клейм §12 о механизме сторожа спойлера · число-дрейф §7§14 · обратный порядок разделов 1215) — приёмочная запись в зонном журнале фронта, здесь не пересказываются. Референс fleet_2.png докинут владельцем при приёмке, якоря палитры подтверждены пиксельной пробой (доминанта #181818 · #292929 · #184176 дословно).
**2. Ратификации.** (а) **Ф-47: `BankTerm.sense` — обязательное поле, пустая строка = «различителя нет»** (спека объявляет `sense` частью ключа уникальности `(book, src, sense, since, until)`, держа его вне `required` — противоречие внутри одного файла); исполняет S3.7 в зонной копии (0.2.1→0.2.2), канон `14-api-contract/` — диффом при лендинге S3.7. (б) Черновик ДОБАВОЧНЫХ полей `BankTerm` (note/gender/contexts/variants/…) НЕ ратифицирован — ждёт слова владельца по границе ПТ-33 (contexts = спойлер по построению; variants/confidence раскрывают конвейер). (в) Гейт S4 (D39.119 п.4) снят этой приёмкой; очередь фронта: S3.7 → приёмка → S4. (г) **Владелец при ревью выданного промта поймал ПРОПУСК приёмки: Ф-35 (интерфейс без хардкода русского) в промт не попала** — оркестратор собрал состав пака из бэклога зоны и долгов, записанных самой сессией, не пройдя лист владельца (START_PROMT) независимым свипом; промт дополнен задачей 9 (словарь строк + линт-гейт против кириллических литералов + хранилище выбора; переводы и список языков НЕ выдумываются). Свип вглубь показал: требование отсутствовало и в реестре продукта — заведено строкой **ПТ-36**. Урок в память оркестратора: состав пака сверять со ВСЕМИ источниками требований, не только с трекером зоны.
**3. Бэклог.** Новая строка **169** — экспорт банка для чтения фронтом (Ф-43: канала под `GET /books/{id}/bank` нет вообще; банк в приватном SQLite, платформе читать запрещено D39.85): движковый артефакт экспорта + платформенная проекция, гейт подписного экрана S5.
**4. Хвосты чужих зон, НЕ тронуты (передано полигонному лендингу):** застейдженный `docs/README.md` линкует `POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, а файл в индексе — `POLYGON_EXP2223_REDO_SESSION_PROMPT.md` (битая ссылка после коммита); тот же указатель в полигонной части CURRENT-STATE; строка «активные промты» README отстаёт по фронту (S3.5→S3.7) — чинится тем же касанием (10.08.2026, оркестратор №16). ✅
## D39.128 — ПОЛНОЕ ПЕРЕ-ЧТЕНИЕ КОРПУСА ПО ЗАКАЗУ ВЛАДЕЛЬЦА; выданы промты: бэкенд-эмиттер (103+135+165, закрывает PD-113) и платформа P5 (П-9+PD-140+П-11) (10.08). ✅
**1. Чтение.** По заказу владельца 10.08 («изучи вопрос досконально, перепрочитай документацию, не грепами») прочитаны ЦЕЛИКОМ: живой D-лог (все тела, 1469) · `docs/PROGRESS.md` · `platform/docs/platform-PROGRESS.md` · `frontend/docs/frontend-PROGRESS.md` · `16-events-emitter.md` · `15-money-path.md` · `research/23` (через баннер) · `research/25`. Противоречий, меняющих план паков, не найдено; одно поверхностное расхождение передано сессии задачей (граница гейта потолка: `15-money-path.md` §2 пп.12 расходятся на поверхности — выяснить по коду, строка 135).
**2. Промты (запуск обоих — по слову владельца; параллельность легальна, зоны не пересекаются; фронт S3.7 живёт в `frontend/` параллельно).** (а) **Бэкенд-эмиттер** `docs/BACKEND_EMITTER_SESSION_PROMPT.md`: строка 103 (журнал `events.jsonl` по форме D39.106; словарь — ответ ДИФФОМ на предложение платформы `events.go`; сквозная проба своим журналом через настоящий декодер платформы в копии зоны) + 135 (гейт потолка пер-вызов) + 165 (различимые exit-коды — PD-113) + 102 опционально; $0; дизайн-развилки нормдока §5 отданы сессии с записью решений; голден/снапшот-нейтральность — обязательное доказательство. (б) **Платформа P5** `platform/docs/PLATFORM_P5_SESSION_PROMPT.md`: П-9 `POST /books` (+PD-72; ⚠ развилка «кто пишет `book.yaml` при интейке» ГЕЙЧЕНА ратификацией — вопрос в зонный журнал до стройки той половины) + стоп/резюм PD-140 (кандидат-дизайн: намерение стопа своей стороной до SIGTERM — дискриминатор против PD-152) + наблюдаемость П-11 + печать конфигурации PD-114 + DEFECT_REGISTER секциями (остаток 167).
**3. Хвост чужого дерева (повтор D39.127 п.4):** строка «активные промты» `docs/README.md` отстаёт (S3.5→S3.7, эмиттер/P5 не назван) и несёт чужой застейдженный полигонный hunk — актуализирует полигонный лендинг (10.08.2026, оркестратор №16). ✅

View file

@ -60,6 +60,7 @@
| ПТ-33 | Интерфейс НЕ раскрывает конвейер: ни моделей, ни стадий, ни внутренней терминологии — пользователь видит «загрузка → разбор → перевод → подпись банка → финал → готово» (решение владельца 02.08) | ⭕ | инвариант D39.81; контракт API v0 РАТИФИЦИРОВАН (D39.99, `architecture/14-api-contract/`): словарь десяти статусов принят владельцем 04.08 (D39.100/К-1); карта «вердикт → фраза» — приложение А компаньона, слова заполняет владелец (В-3); ревью-вопрос «сменится стадия — править ли фронт?» отвечен таблицей §5 компаньона |
| ПТ-34 | Пользовательский перевод НИКОГДА не попадает на публично индексируемый URL — ни витрин примеров, ни «поделиться главой», ни публичных ссылок чтения (жёсткий продуктовый запрет, решение владельца 02.08; авторское право на исходники + политика Google по масштабируемому машин-контенту действуют на весь домен) | ⭕ | инвариант D39.84; носители: двухконтурный деплой `frontend/docs/STACK_DECISIONS.md` §4 (SPA под `X-Robots-Tag: noindex` на каждом HTML-ответе; публичный контур без контента переводов) + контракт 14 (`architecture/14-api-contract/`, D39.99) + платформенный бэклог П-1 |
| ПТ-35 | Лимиты «как в Claude Code» (решение владельца 04.08, D39.100): страница лимитов/использования в настройках (статус, НЕ суммы — запрет денег на экране в силе); стоп по потолку = статус `paused` + оповещение «перевод остановлен: лимиты исчерпаны» | 🔶 | контракт К-8 закрыт, спека несёт `paused`/`paused_reason` (0.2.0+, D39.115); ручки /v0 — платформа-раннер P4 (D39.123); остаток: страница лимитов на фронте (S4+) · точное продуктовое слово — В-3 на владельце · К-13 (`paused_reason` не различает свой потолок и нет кредита, D39.115 п.6б) |
| ПТ-36 | Интерфейс МУЛЬТИЯЗЫЧНЫЙ, русский не хардкодится в разметке (слово владельца 10.08; язык интерфейса — отдельная ось от языков перевода). ⚠ До 10.08 требование в реестре отсутствовало — пропуск поймал владелец (D39.127 п.2г) | ⭕ | механизм (словарь строк · линт-гейт против кириллических литералов · хранилище выбора) = промт S3.7 задача 9 + строка Ф-35 фронта; локаль примитивов уже сведена (`frontend/src/ui/Locale.tsx`); продуктовый список языков — 🔒 владелец |
## Качество процесса и самоулучшение