From 2817d2866522ee5b61e52df2a9b765f0b70fddbc Mon Sep 17 00:00:00 2001 From: heaven Date: Tue, 1 Sep 2026 23:49:13 +0300 Subject: [PATCH] Close the B0 dofix: my own edit joined two header lines and killed two token anchors that I had wrongly blamed on a later batch --- docs/ORCHESTRATOR_SESSION_PROMPT.md | 2 +- docs/architecture/09-target-architecture.md | 2 +- docs/architecture/14-api-contract/README.md | 5 +++-- docs/glossary.md | 2 +- docs/product-requirements.md | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/ORCHESTRATOR_SESSION_PROMPT.md b/docs/ORCHESTRATOR_SESSION_PROMPT.md index 08413502..4588ec0f 100644 --- a/docs/ORCHESTRATOR_SESSION_PROMPT.md +++ b/docs/ORCHESTRATOR_SESSION_PROMPT.md @@ -170,7 +170,7 @@ D-ссылка грепается по D-логу · mid-flight аддендум правки. Микро-дефекты доков чини сам с пометкой «испр. оркестратором»; отчёты получают ревью-шапку; код не правишь — находки в фикс-лист. При лендинге зоны: вычитать её журнал на НОВЫЕ «решения владельца» → confirm-лист (решение только в зонном доке при противоречащем каноне = дефект -синхронизации); байт-зеркала (контракт) сверять `cmp`. +синхронизации); байт-зеркала (контракт) сверять `cmp` — ⚠ КРОМЕ зеркала фронта: на время фриза зоны его отставание РАТИФИЦИРОВАНО (D39.142 п.5), нормативен только канон. ### Ратифицируешь? diff --git a/docs/architecture/09-target-architecture.md b/docs/architecture/09-target-architecture.md index a214ab32..462061a7 100644 --- a/docs/architecture/09-target-architecture.md +++ b/docs/architecture/09-target-architecture.md @@ -9,7 +9,7 @@ > ⚠ **ОСВЕЖЁН 28.08 (D39.167, аудит доков). За сутки после прежней редакции залендено ДЕСЯТЬ нот, и шапка их не знала — а её читает КАЖДАЯ бэкенд-сессия при онбординге.** > **Что построено с тех пор:** платформенная дверь правок банка `POST /books/{bookId}/bank/corrections` смонтирована синхронно (D39.162) · ключи деплоя доезжают до движка аргументом `--keys-file` — **строка 211 ЗАКРЫТА, блокером живого прогона она больше не является** · полоса прогресса стала СКВОЗНОЙ, с подписью стадии вторым исключением границы (D39.162/D39.163) · бэкенд-пак «тихая порча»: инъекция банка перестала теряться на провайдере с одним системным слотом, дыра выдачи видна читателю, повтор документа решений сходится (D39.164) · пере-проход можно КУПИТЬ (D39.166) · **писатель книги ПОСТРОЕН (30.08, D39.175)**: `tmctl build` — EPUB 3 + чистый txt из `BookExport` (`internal/bookfile`, stdlib), шесть состояний честности (pending·withheld·incomplete·ghost·stale + drift отчётом), отказ exit 16 / `--partial` с пометкой, пути в `StatusArtifacts.book_files`; дверь платформы обязана СТРОИТЬ (`tmctl build --format [--partial]`) и отдавать построенное, а НЕ читать файл, лежащий рядом с БД (там копия прежней сборки). -> ⚠ **Канон контракта — 0.9.0** (D39.180, лендинг пака P12 31.08), не 0.4.0 и не 0.7.0: шесть миноров за четверо суток (0.5.0 — D39.161, 0.6.0 — D39.162/163, 0.7.0 — D39.166, 0.8.0 — D39.169, **0.9.0 — D39.180**, кадр `session_ended`). Носители — `14-api-contract/openapi.yaml` и `platform/internal/httpapi/capabilities.go`, они сходятся гейтом. ⚠ **С 29–30.08 шапка ниже НЕ знает ещё двух построенных механизмов, и до их внесения в таблицу слоёв читать её как полную нельзя:** объёмный потолок оплаченной работы в движке (`--max-units`, `VolumeStop`, `backend/internal/pipeline/volume.go` — D39.170; носитель ратифицированного решения о единице продажи D39.165 §1) и гейт схемы движка (`backend/internal/store/sqlgate_test.go` — D39.173: каждый SQL-оператор компилируется против схемы, поднятой продовой цепью миграций). +> ⚠ **Канон контракта — 0.9.0** (D39.180, лендинг пака P12 31.08), не 0.4.0 и не 0.7.0: пять миноров за четверо суток (0.5.0 — D39.161, 0.6.0 — D39.162/163, 0.7.0 — D39.166, 0.8.0 — D39.169, **0.9.0 — D39.180**, кадр `session_ended`). Носители — `14-api-contract/openapi.yaml` и `platform/internal/httpapi/capabilities.go`, они сходятся гейтом. ⚠ **С 29–30.08 шапка ниже НЕ знает ещё двух построенных механизмов, и до их внесения в таблицу слоёв читать её как полную нельзя:** объёмный потолок оплаченной работы в движке (`--max-units`, `VolumeStop`, `backend/internal/pipeline/volume.go` — D39.170; носитель ратифицированного решения о единице продажи D39.165 §1) и гейт схемы движка (`backend/internal/store/sqlgate_test.go` — D39.173: каждый SQL-оператор компилируется против схемы, поднятой продовой цепью миграций). > > **⟶ СТАТУС СТРОЙКИ (прежняя редакция, 27.08 оркестратором №19: **ВХОДНАЯ ДВЕРЬ ШВА ПОСТРОЕНА** — D39.158, четыре пака зоны бэкенда приняты и заленджены одним деревом; закон двери D39.156 тем самым исполнен, а не только ратифицирован. Онтология банка вынесена страницей `18-bank-ontology.md`. Прежняя редакция шапки от 23.08: **РАТИФИЦИРОВАН ЗАКОН ВХОДНОЙ ДВЕРИ ШВА** — D39.156, тело `17-seam-inbound-law.md`. Половина контракта движок↔платформа, которой не было: наружу поток богатый, внутрь не шло ничего, кроме запуска с флагами, поэтому данные ПОЛЬЗОВАТЕЛЯ движок принимать не умел. Ратифицирована ДИСЦИПЛИНА из семи пунктов, не каталог команд ⇒ двери встают паками без нового решения владельца. Развилка владения `book.yaml` (строка 199а) РАСТВОРЕНА: конвенционные дефолты путей + движковый глагол-писатель. Свип ВСЕЙ границы дал ОДНО гнилое место (строка 213) при шести ратифицированных каналах — широкого рефакторинга шва не требуется. Заведены строки 211 (движок на SaaS не получает провайдерских ключей — БЛОКЕР живого прогона 202), 212, 213; выдан движковый пак `BACKEND_SEAM_PACK_SESSION_PROMPT.md`. Ранее 22.08 оркестратором №18: **пак платформы P8-FIX ПРИНЯТ и ЗАЛЕНДЕН** — голодание свипа `PD-169` закрыто четырьмя механизмами (фазы прохода · отсрочка с бэкоффом · порог `StalledAfter` с гейджем и CLI · терминальный вердикт оператора `run abandon`), оба бюджета стали операторскими ручками, снят пер-термный write-путь банка по D39.144 — открытой осталась контрактная половина `PD-370` (строка 206). Ранее 20.08: **пак P7 платформы ПРИНЯТ и ЗАЛЕНДЕН** — читающая поверхность построена целиком (главы · юниты · замечания · проекция банка · SSE · модель ошибок · условные чтения · идемпотентность), D39.153; **канон контракта — 0.4.0**, ратифицирован D39.152; пак движка «честные числа и статусы» принят с фикс-листом, D39.149. Предыдущий срез — 16.08 оркестратором №17: контракт-ревью ПРИНЯТО (research/28, D39.138), ломающий батч 0.3.0 ИСПОЛНЕН и принят с дофиксом (D39.142–145: конвейер снят с провода, машинная модель ошибок, /capabilities, поток на книгу, подпись банка = один ОК D39.144; жанр из продукта ВЫКИНУТ — строка 184); P7 платформы ЗАПУЩЕН по финальному канону. Ранее 15.08: эмиттер шва ПОСТРОЕН И ПРИНЯТ — `events.jsonl` StreamVersion 1.1, exit 4/5 + полоса отказов 10–19 (D39.131); платформа P6 + дофикс приняты — потребительская половина шва, интейк формы Б, дев-стенд, PD-113/PD-196 закрыты (D39.132); `tmctl migrate` принят — exit 13 финализирован, деадлок деплоя v15 разорван (D39.134); фронт S4 принят — путь «файл → загрузка → запуск → прогресс» в мире моков, контракт **0.2.3** в каноне (D39.135). Ранее 14.08 №16: платформа достроена до интейка книг P5 — `POST /books` с сентинелом хранилища, стоп/резюм с намерением, Prometheus, Go-floor 1.26.6 (D39.130); фронт — S3.5–S3.7 приняты (оболочка · слой данных · i18n; D39.127/129). Ранее 09.08, пост-D39.125: шов движок↔платформа ратифицирован — транзиентный systemd-юнит на прогон + `events.jsonl`-outbox в каталоге книги, платформа НЕ родитель (D39.106); платформа достроена до раннера P4 (D39.109/114/123 — River-очередь, холд-до-спавна, реконсилятор; дефекты — `platform/docs/DEFECT_REGISTER.md`); фронт — слой данных S3, контракт 0.2.0→0.2.1 (D39.115/123); движок отдал блокеры контракта — `tm-manifest-v2`, `unit.id` с тегом разреза, пофазные счётчики на главу, `--ceiling-usd` (D39.122); слой 4 добит фикс-паком банка — семьи термов со-батчатся юнитами, bankdata-плоскость (D39.118). Ранее 04.08, пост-D39.105: слои 4/5 добраны паками банка/чекеров D39.69/78/82; репо на стандартах — `make battery`, tmvet/archguard, D39.96/97; контракт API v0 = `14-api-contract/` (D39.99), платформа = зона `platform/`, открыта D39.100. Баннер — не переписывание, тело ниже = замысел арх-ресета 13.07).** Карта «слой → статус → пак/D»: > | Слой | Статус | Пак / D | diff --git a/docs/architecture/14-api-contract/README.md b/docs/architecture/14-api-contract/README.md index 4037a6a0..9aff803f 100644 --- a/docs/architecture/14-api-contract/README.md +++ b/docs/architecture/14-api-contract/README.md @@ -5,7 +5,8 @@ СТАТУС: РАТИФИЦИРОВАН как контракт API v0 по 0.9.0 включительно (D39.180; перечень миноров и их провенанс — ниже по файлу, здесь НЕ дублируется). Нормативная поверхность — openapi.yaml РЯДОМ. -⚠ Зонная копия frontend/docs/api-contract/ ВРЕМЕННО ОТСТАЁТ (0.2.3 при каноне 0.9.0 — СЕМЬ миноров) — ратифицировано D39.142 п.5 на время фриза фронта; синк байт-в-байт + перегенерация типов = +⚠ Зонная копия frontend/docs/api-contract/ ВРЕМЕННО ОТСТАЁТ (0.2.3 при каноне +0.9.0 — СЕМЬ миноров) — ратифицировано D39.142 п.5 на время фриза фронта; синк байт-в-байт + перегенерация типов = первое касание зоны при разморозке; после него правило прежнее: расхождение = дефект лендинга. Генерация типов фронта после этой ратификации идёт из ЭТОЙ копии. @@ -69,7 +70,7 @@ cmp-сверка обязательна (D39.138 п.3). > граница пересчёта `chapters_done` и непрозрачный `Book.shape_epoch`, которым она себя называет; > провенанс — §2.22**. > Дом канона — этот каталог; -> `frontend/docs/api-contract/openapi.yaml` — байт-зеркало. +> `frontend/docs/api-contract/openapi.yaml` — байт-зеркало ⚠ НА ФРИЗЕ ЗОНЫ РАВЕНСТВО ПРИОСТАНОВЛЕНО (D39.142 п.5): зеркало 0.2.3, канон 0.9.0. > > ⚠ **0.5.0 ломающий по построению (мажор `0`): снесены путь `POST …/bank/decisions` и три его > схемы, из `BankPage` и `EventBank` сняты `pending_decisions`/`complete` (§2.19-бис), в diff --git a/docs/glossary.md b/docs/glossary.md index 1701fa7c..67e5d94f 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -28,7 +28,7 @@ - **Строка N** — стабильный ID строки единого бэклога (PROGRESS §Бэклог; не перенумеровывается); **вес** — блокер-очереди / скоро / когда-нибудь; **носитель** — артефакт, в котором обязательство живёт; **хвост** — незакрытый остаток; **петля** — вопрос, обязанный получить диспозицию; **слот** — зарезервированное место в будущем пакете/замере. - **Гвоздь** — регрессионный тест, прибивающий контракт (негативный гвоздь — тест на ОТСУТСТВИЕ поведения). - **Реестр 108 / «жилец реестра»** — строка 108 единого бэклога: реестр ЗАГЕЙЧЕННЫХ ТРИГГЕРОВ (отложенных реопенов с условием «когда вернуться»); «жилец» = такой реопен. «Каждое отложено получает строку бэклога или жильца реестра 108» — норма D39.66/D39.90. -- **Контракт 14 (API v0)** — ратифицированный контракт фронт↔платформа: `architecture/14-api-contract/` — нормативная спека OpenAPI 3.1 + компаньон-README; зонная копия `frontend/docs/api-contract/` — байт-зеркало (D39.99; ⚠ временно ОТСТАЁТ — ратифицировано D39.142 п.5 на фриз фронта, синк при разморозке; версии — в самих спеках, здесь не пинятся). **Провенанс ✓/◆/○** — классы утверждений компаньона: выведено из кода/ратификации · предложено (подтверждает названная зона) · открыто (К-вопросы). **spectral / openapi-typescript** — линт спеки и генерация типов фронта с дрифт-тестом (⚠ 3.1-условия генератор игнорирует — К-11). +- **Контракт 14 (API v0)** — ратифицированный контракт фронт↔платформа: `architecture/14-api-contract/` — нормативная спека OpenAPI 3.1 + компаньон-README; зонная копия `frontend/docs/api-contract/` — байт-зеркало (D39.99; ⚠ временно ОТСТАЁТ на СЕМЬ миноров — 0.2.3 против канона 0.9.0, — ратифицировано D39.142 п.5 на фриз фронта, синк при разморозке; версии — в самих спеках, здесь не пинятся). **Провенанс ✓/◆/○** — классы утверждений компаньона: выведено из кода/ратификации · предложено (подтверждает названная зона) · открыто (К-вопросы). **spectral / openapi-typescript** — линт спеки и генерация типов фронта с дрифт-тестом (⚠ 3.1-условия генератор игнорирует — К-11). - **ПТ-N** — стабильный ID требования в `product-requirements.md`; не путать со строками единого бэклога. **paused / лимиты «как Claude Code»** — статус книги при стопе по потолку + страница статуса использования в настройках, сумм на экране нет (ПТ-35, D39.100). ## Пайплайн и код diff --git a/docs/product-requirements.md b/docs/product-requirements.md index acead874..a5d21ffe 100644 --- a/docs/product-requirements.md +++ b/docs/product-requirements.md @@ -53,7 +53,7 @@ | ID | Требование (источник) | Статус | Носитель / доказательство | |---|---|---|---| -| ПТ-20 | Ридер-IDE: VS Code-подобный фронт агентного перевода (V0-п.20/23) | ⭕ | research/16 принят (D29); строки 69–71; F3-brief — D29 п.3. Ф3 ОТКРЫТА 02.08 (D39.81): фронт-сессия живёт на моках; контракт API ратифицирован (D39.99; ⚠ версии в этой ячейке протухали ПЯТЬЖДЫ — испр. 01.09 ревизией доков (прежде 30.08 аудитом): **канон стоит на 0.9.0** (греп `^ version:` в `openapi.yaml`; ⚠ номер строки и само число двигаются минорами — сверяй файлом, не этой ячейкой), и пять миноров прошли за четверо суток — **0.5.0** (D39.161: снос отменённой пер-термной модели + дверь приёма правок банка, строка 206 закрыта), **0.6.0** (D39.162/D39.163: сквозная полоса прогресса, строка 200 закрыта, `Progress.stage` вторым исключением границы), **0.7.0** (D39.166: покупка пере-прохода), **0.8.0** (D39.169: кадр `session_ended` — отзыв сессии гасит открытый поток и НАЗЫВАЕТ причину). ⚠ 30.08 РАТИФИЦИРОВАН минор **0.9.0** (вторая граница пересчёта `chapters_done` + непрозрачный `shape_epoch` в проекции `Book`) — 31.08 ЗАЛЕНДЖЕН вместе с паком P12 (D39.180, `0a680a3`); канон стоит на **0.9.0**. Открытыми по контракту остаются хвост строки **203** и строка **241** (самопротиворечие канона на дочитанной книге). Зеркало ФРОНТА ратифицированно отстаёт на 0.2.3 — D39.135, синк при разморозке. ⚠ Урок ячейки: версия здесь живёт хуже всего — при следующем миноре правится ПЕРВОЙ); платформа построена до читающей поверхности и денежной двери: вход/кредиты (⚠ КВОТ нет ни строки кода, и по D39.176 п.1 не будет — продуктовых квот нет, фри-тир-лимиты не проектируются; ретеншен/свип остаются инженерной гигиеной) (P0–P3) + раннер P4 (D39.123) + интейк `POST /books` со стоп/резюмом (D39.130) + exit-словарь/фолд юнитов/дев-стенд (P6, D39.132); фронт — S3.5–S4 приняты (оболочка · слой данных · i18n · путь «файл→прогресс», D39.127/129/135), **зона ЗАМОРОЖЕНА, и с 17.08 морозится ДАЛЬШЕ лендинга P7** (D39.136 п.2 + D39.147: сначала движок и платформа до «работает и отдаёт результат», фронт накручивается на готовую функциональность) | +| ПТ-20 | Ридер-IDE: VS Code-подобный фронт агентного перевода (V0-п.20/23) | ⭕ | research/16 принят (D29); строки 69–71; F3-brief — D29 п.3. Ф3 ОТКРЫТА 02.08 (D39.81): фронт-сессия живёт на моках; контракт API ратифицирован (D39.99; ⚠ версии в этой ячейке протухали пять раз — испр. 01.09 ревизией доков (прежде 30.08 аудитом): **канон стоит на 0.9.0** (греп `^ version:` в `openapi.yaml`; ⚠ номер строки и само число двигаются минорами — сверяй файлом, не этой ячейкой), и пять миноров прошли за четверо суток — **0.5.0** (D39.161: снос отменённой пер-термной модели + дверь приёма правок банка, строка 206 закрыта), **0.6.0** (D39.162/D39.163: сквозная полоса прогресса, строка 200 закрыта, `Progress.stage` вторым исключением границы), **0.7.0** (D39.166: покупка пере-прохода), **0.8.0** (D39.169: кадр `session_ended` — отзыв сессии гасит открытый поток и НАЗЫВАЕТ причину). ⚠ 30.08 РАТИФИЦИРОВАН минор **0.9.0** (вторая граница пересчёта `chapters_done` + непрозрачный `shape_epoch` в проекции `Book`) — 31.08 ЗАЛЕНДЖЕН вместе с паком P12 (D39.180, `0a680a3`); канон стоит на **0.9.0**. Открытыми по контракту остаются хвост строки **203** и строка **241** (самопротиворечие канона на дочитанной книге). Зеркало ФРОНТА ратифицированно отстаёт на 0.2.3 — D39.135, синк при разморозке. ⚠ Урок ячейки: версия здесь живёт хуже всего — при следующем миноре правится ПЕРВОЙ); платформа построена до читающей поверхности и денежной двери: вход/кредиты (⚠ КВОТ нет ни строки кода, и по D39.176 п.1 не будет — продуктовых квот нет, фри-тир-лимиты не проектируются; ретеншен/свип остаются инженерной гигиеной) (P0–P3) + раннер P4 (D39.123) + интейк `POST /books` со стоп/резюмом (D39.130) + exit-словарь/фолд юнитов/дев-стенд (P6, D39.132); фронт — S3.5–S4 приняты (оболочка · слой данных · i18n · путь «файл→прогресс», D39.127/129/135), **зона ЗАМОРОЖЕНА, и с 17.08 морозится ДАЛЬШЕ лендинга P7** (D39.136 п.2 + D39.147: сначала движок и платформа до «работает и отдаёт результат», фронт накручивается на готовую функциональность) | | ПТ-21 | Параллельное чтение двух текстов с выравниванием по смыслам (V0-п.21); выравнивание грубое, по единицам экспорта — принято владельцем 02.08, спаны внутри текста не строятся | 🔶 | механизм готов: `tmctl export --pairs` выравнивает пары побайтно по единицам редактуры (`internal/pipeline/export.go:89-93`); якорь = **edit-unit**, НЕ чанк (переформулировано D39.84 — финальный текст существует только на уровне юнита, ~1.9 юнита/главу, местами глава = один блок; читалка обязана это выдерживать); UI-читалка = Ф3 (этап S6) | | ПТ-22 | Настройки от человека: 18+, жанр и т.п. (V0-п.22) | 🔶 | `book.yaml` (labels) данными; UI = Ф3. ⚠ ЖАНР из продукта ВЫКИНУТ словом владельца 16.08 (D39.138 п.2в, строка 184: ни на чём не ветвится, влияние не измерено; снимается из промптов/брифа/контракта/формы) | | ПТ-23 | Веб-ПЕРВЫЙ фронт; SEO/ранжирование Google — куки, страницы-сироты, актуальные алгоритмы (V5-п.2); продукт = **SaaS**, не локальное приложение (решение владельца 02.08, D39.81 — натив-прицел V0-п.26 СНЯТ этим решением, вернуть только новым словом владельца); SEO только под Google, Яндекс снят; рынок глобальный; десктоп = PWA первым шагом, Tauri по явным триггерам (решения владельца 02.08, D39.84) | ⭕ | строка 71 (Ф3-бриф); SEO вошёл в стек-дизайн ДО выбора (D39.84, требование исполнено): двухконтурный деплой — SPA `app.<домен>` целиком под noindex + статический публичный контур ≤3 кликов от главной (лечение страниц-сирот), `frontend/docs/STACK_DECISIONS.md` §4; SSR-вопрос закрыт этим решением |