Ping both zones with the seam findings, hold the contract minor behind ratification, define shipping-config, and correct row 16 arithmetic and a wrong migration in the review prompt

This commit is contained in:
heaven 2026-08-23 01:14:59 +03:00
parent 6b5f0a5105
commit f68ead69a9
4 changed files with 55 additions and 4 deletions

File diff suppressed because one or more lines are too long

View file

@ -10,6 +10,7 @@
- **Ф0Ф3** — фазы: Ф0 скелет · Ф1 инфраструктура · Ф2 качество (судья/гейты) · Ф2.5 пилот · Ф3 продукт (веб-фронт, ридер-IDE).
- **S0S7 / P0P8** — нумерация кодовых сессий зон: S-этапы фронта (S0S4 приняты, S4 — путь «файл→прогресс», D39.135; зона ЗАМОРОЖЕНА, и лендинг P7 её НЕ разморозил — D39.147: P7 её не размораживает, S5 не выдаётся, разморозка отдельным словом владельца) · P-этапы платформы (P0 бутстрап D39.100 … P6 потребительская половина шва D39.132 · **P7 читающая поверхность — ПРИНЯТ С ФИКС-ЛИСТОМ и ЗАЛЕНДЕН 20.08, D39.153** · **P8-FIX — фикс-лист P7 плюс блокер свипа, ПРИНЯТ и ЗАЛЕНДЕН 22.08, D39.154**; читающий пак P8-REVIEW выдан и ждёт запуска); не путать с фазами Ф0Ф3.
- **Зонный журнал / зонный бэклог**`frontend/docs/frontend-PROGRESS.md` · `platform/docs/platform-PROGRESS.md` и BACKLOG зоны: прогресс/пинги фронта и платформы живут ТОЛЬКО там (D39.100); их строки единый бэклог не принимает (D39.84).
- **Шиппинг-конфиг** — конфиг пайплайна, по которому идёт БОЕВОЙ прогон, в отличие от тестового и от ран-локального. ⚠ Нормативного определения у термина ДО 23.08 не было, и это уже стоило путаницы: клейм «гейт голоса не включён ни в одном шиппинг-конфиге» верен про шаблоны репозитория (`backend/configs/`), но конфиг РЕАЛЬНОГО прогона живёт РЯДОМ С КНИГОЙ, вне git, и там гейт был включён. Читать так: «шиппинг-конфиг» = шаблон в `backend/configs/`; конфиг конкретного прогона — «ран-локальный», и утверждения о нём проверяются в каталоге книги, а не грепом по репозиторию.
- **Полигон** — eval-зона платных/бесплатных экспериментов (`eval/`; отчёты — `docs/experiments/`, статус эксп-аего баннер/D-лог).
## Решения и документы

View file

@ -63,7 +63,7 @@
Приор: здесь дефект стоит денег. ⚠ **Уточнение базовой линии:** «не смотрел никто» — про СИСТЕМНЫЙ разбор оси; точечно её трогали, и в регистре есть строки со ссылками на `credits.go` и на прежние денежные линзы. Смотри их как известное, не переоткрывай. ⚠ **Два денежных дефекта, которые прежняя редакция этого промта звала «найденными, но не заведёнными», ЗАВЕДЕНЫ И ЗАКРЫТЫ паком P8-FIX 22.08** (испр. при лендинге): изоляция `inReadTx``PD-333`, оговорка `book_id <> $2` в `CreditHeldBy``PD-334`; у обоих пины, и оба пина проверены посадкой мутации. **Не переоткрывай их — ищи их КЛАСС**, и вот он сформулирован: «оговорка в комментарии или в SQL, которую ни один тест не исполняет». Тот же пак закрыл этот класс ещё в двух местах и оставил его открытым в третьем (`PD-372`: пин стоит на функции `truncateReason`, а ни один из четырёх её вызовов не проверен) — это живой образец того, что ты ищешь. Предмет: резерв → расчёт → возврат холда · потолки (книжный и дневной) · арифметика микро-долларов и округления · `spend_baseline`/`SpendBound` · кэп расхода холдом · путь «расход провайдера случился, а строка в леджер не легла» · `adjust` и доля в `/usage`.
Отправные точки: `internal/pgstore/credits.go`, `internal/money/`, `internal/runs/reconcile.go` (`settle`, `restart`), миграции `00007_credits.sql`, `00019`.
Отправные точки: `internal/pgstore/credits.go`, `internal/money/`, `internal/runs/reconcile.go` (`settle`, `restart`), миграции `00007_credits.sql`, `00010_spend_baseline.sql`, `00011_ceiling_argument.sql`. ⚠ Испр. оркестратором №19 23.08: прежняя редакция звала здесь `00019`, но это `00019_read_model_debt.sql` — долг read-модели, к деньгам отношения не имеет; ось 1 по ней ушла бы не туда.
**Норма, обязательная к исполнению (канон приёмок).** ⚠ Обязателен САМ ЗАМЕР, а не оформление уже найденного: сессия, ничего не нашедшая, чисел не производит — и норма «каждое число двумя путями» не связала бы ничего. Поэтому минимум: сведи на стенде баланс аккаунта, сумму леджера и открытые холды двумя путями ДО всякого поиска — расхождение здесь и есть первая находка. Дальше каждое число — из СЫРОГО леджера **двумя независимыми путями** (чтение кода/SQL и прямой `SELECT` по стенду). Пути обязаны сойтись или расхождение называется числом. ⚠ И вторая половина той же нормы, без которой первая обманывает: **леджер = НИЖНЯЯ граница**. Сходимость двух путей доказывает согласованность, а НЕ полноту: вызов, за который провайдер списал, а строка не легла, сойдётся в обоих путях одинаково неверно. Для оси, у которой этот путь прямо в предмете, ищи его отдельно.

View file

@ -6,6 +6,32 @@
## Текущее состояние
**⛔ ПИНГ ОРКЕСТРАТОРА №19 — 23.08, ЗОНЕ ПЛАТФОРМЫ. Три находки, все сверены моими командами; рукой в код не лезу.**
1. **Пере-нарезка книги сносит ВСЕ решения юнитов и пересчитывает прогресс из пустоты.**
`internal/pgstore/readmodel.go:127-137`=`a re-cut drops the resolutions of the previous cut`
это не догадка, там собственный комментарий кода. Строку в ваш регистр я не заводил: решать вам,
намеренная это семантика пере-разреза или дефект, и что делать со счётчиками, которые после
этого показывают ноль сделанного на книге, где работа была.
2. **⛔ БЛОКЕР ЖИВОГО ПРОГОНА: движок на SaaS не получает провайдерских ключей** — строка **211**
единого бэклога, тело там. Ваша половина: путь к файлу ключей едет из конфига платформы в
аргументы движка, а дев-супервизор переводится на тот же механизм. Сейчас пути РАЗНЫЕ —
`internal/ingest/supervisor.go:35-36,65-67`=`Provider keys reach the engine through it` наследует
окружение платформы, а прод-спавн ставит юниту ровно один элемент
(`internal/runs/spawn.go:168`=`Env: engineEnv(engineStreamID(`). Поэтому стенд зелёный, а прод
голодает, и ни один тест упасть не мог. Пока два пути кормят движок по-разному, следующий такой
блокер снова пройдёт всю батарею.
3. **Дубль движковой конвенции у вас.** `internal/runner/artifacts.go:65-95`=`neither project_db nor book_id`
сам вычисляет путь БД книги, повторяя `backend/internal/config/book.go:163-167`=`b.ProjectDB = filepath.Join(dir, b.BookID+".db")`;
смена дефолта в движке тихо уведёт ваше чтение банка на несуществующий путь. Строка **213**.
Фикс аддитивный и без ломки: движок отдаёт путь артефакта, вы выкидываете свой `projectDB()`.
⚠ Пере-именование банк-экспорта в фикс-имя — ЛОМАЮЩЕЕ, ему место в окне строки 161, не здесь.
*(Промт `P8-REVIEW` жив и ждёт слова владельца; два дефекта в нём я нашёл и починю ДО выдачи —
одна из названных «денежных» миграций денежной не является, и счёт чужого дерева в шапке протух.)*
- **P8-FIX ПРИНЯТ И ЗАЛЕНДЕН оркестратором №18 (22.08).** Тело приёмки — ратифицированная нота
**D39.154** (`docs/architecture/05-decisions-log.md`), здесь не пересказывается. Зоне важно ровно
следующее, и этого в ноте нет: