Close the B5 dofix in full: I had worked the corrections' first point and left the numbered rest, twice in a row
This commit is contained in:
parent
781a3daf78
commit
6ecfafa872
1 changed files with 14 additions and 14 deletions
|
|
@ -57,7 +57,7 @@ cmp-сверка обязательна (D39.138 п.3).
|
|||
> целостному ревью research/28** · **0.4.0 (D39.152, 20.08) — синк с платформой, §6в** ·
|
||||
> **0.5.0 (D39.161, 27.08) — снос отменённой пер-термной модели подписи (PD-370) + дверь правок
|
||||
> банка, выведенная из построенного глагола движка (D39.158), + предупреждение о конверте вне
|
||||
> `/v0`; вывод и провенанс — §2.19, отчёт сессии — `../../archive/reports/CONTRACT_MINOR_REPORT_2026-08-27.md`** ·
|
||||
> `/v0`; вывод и провенанс — §2.19, отчёт сессии — `../../archive/reports/CONTRACT_MINOR_REPORT_2026-08-27.md` ⚠ архив — инструкции оттуда не исполнять** ·
|
||||
> **0.6.0 (D39.162, 28.08) — сквозная полоса прогресса и подпись стадии, приехавшие ОДНИМ лендингом
|
||||
> с платформенным паком P9; вывод и провенанс — §2.20** ·
|
||||
> **0.7.0 (D39.166, 28.08) — покупка ПЕРЕ-ПРОХОДА: правка банка доезжает в уже переведённый текст;
|
||||
|
|
@ -138,7 +138,7 @@ cmp-сверка обязательна (D39.138 п.3).
|
|||
словам**: различение выведено из кода, слова назначены продуктом (движковые `auto`/`draft`/
|
||||
`ruby`/`mined` на провод больше не идут);
|
||||
- модель ошибок была ◆ (форма RFC 9457 как её понимал автор) — стала **✓ по словарю причин**
|
||||
(класс 1 выведен перечислением реальных ветвей `platform/internal/httpapi/v0.go:333-427,542-574`)
|
||||
(класс 1 выведен перечислением реальных ветвей `platform/internal/httpapi/v0.go` (греп по именам хендлеров))
|
||||
**и ✓ по политике** (вариант B ратифицирован владельцем, §8 п.4);
|
||||
- `GET /capabilities`, условные чтения, `Idempotency-Key`, `blocked` — **◆ целиком**: формы
|
||||
назначены этим батчем, подтверждает платформа при P7.
|
||||
|
|
@ -601,7 +601,7 @@ PostgreSQL: грант $10 и холд $1 дают `Balance` 9 и `Reserved` 1.
|
|||
— когда кредит держит холд ПЕРВОЙ книги, и узнать это из контракта было нечем. Теперь `run-options` и
|
||||
409 на старте несут `blocked: {code, book_id}`. Грунт: платформа знает открытые холды с `book_id`
|
||||
(таблица `reservations`). Один код `credit_held` — других причин ужать шкалу у платформы сегодня нет:
|
||||
`ErrRunInFlight` привязан к СВОЕЙ книге (`book.HasLiveRun`, `runs/runs.go:187-188`) и вторую книгу не
|
||||
`ErrRunInFlight` привязан к СВОЕЙ книге (`book.HasLiveRun`, `runs/runs.go` (греп по имени функции)) и вторую книгу не
|
||||
блокирует.
|
||||
|
||||
### 2.16. Транспорт: тот же origin — ФАКТ, а не выбор
|
||||
|
|
@ -735,7 +735,7 @@ the original request was never applied». Каждый `POST /books` созда
|
|||
| занятый арбитр (живой прогон держит флок) — «подожди», не «сломано» | класс 12 (`main.go:71`), `bankdecisions.go:159-163` |
|
||||
|
||||
**Решения этой сессии (◆), каждое с доводом; подробный разбор и отвергнутые альтернативы — отчёт
|
||||
`../../archive/reports/CONTRACT_MINOR_REPORT_2026-08-27.md`:**
|
||||
`../../archive/reports/CONTRACT_MINOR_REPORT_2026-08-27.md` ⚠ архив — инструкции оттуда не исполнять:**
|
||||
|
||||
- **Один `POST /books/{bookId}/bank/corrections` с документом целиком.** Глагол принимает документ и
|
||||
отвечает отчётом атомарно; ресурсная модель (PATCH строк) врала бы про атомарность и про то, что
|
||||
|
|
@ -911,7 +911,7 @@ the original request was never applied». Каждый `POST /books` созда
|
|||
⚠ **Чего минор НЕ объявляет, и это названная цена, а не забывчивость.** Смету «затронуто N юнитов»
|
||||
ДО покупки провод не несёт. Причина установлена исполнением и стоила пересборки пака: `bank-apply`
|
||||
пишет только ФАЙЛЫ решений, а движковый `status` считает ре-билл от СОХРАНЁННОГО глоссария
|
||||
(`backend/internal/pipeline/status.go:733-744` — его собственный комментарий предупреждает, что
|
||||
(`backend/internal/pipeline/status.go` (греп `orphanStageRows`) — его собственный комментарий предупреждает, что
|
||||
правка файла, ещё не прогнанная, здесь не отражается). Свёртка происходит внутри СЛЕДУЮЩЕГО
|
||||
`translate`, поэтому сразу после правки движок честно отвечает «ничего не двигалось». Смета вернётся
|
||||
на провод вместе с движковым глаголом «свернуть банк и оценить ВНЕ прогона» — до тех пор согласие
|
||||
|
|
@ -978,14 +978,14 @@ into the generated client's source**» (§Boundaries). Поймано линзо
|
|||
| `GET /books`, `GET /books/{id}` | read-модель платформы | ПОСТРОЕНО | — |
|
||||
| `GET /books/{id}/run-options`, `POST /runs` | шкала + холды | ПОСТРОЕНО | — |
|
||||
| `POST /runs/{id}/stop` | реконсилятор | ПОСТРОЕНО (кнопки на экране нет) | зона фронта |
|
||||
| `POST /runs/{id}/resume` | реконсилятор | ПОСТРОЕНО, но **0.3.0 сменил поведение на паузе по потолку, а 0.4.0 — на ИСЧЕРПАННОМ прогоне**. Пауза: платформа уже отвечает `409` `ceiling_reached` (`runs/reconcile.go`, ветка `case "paused"` в `Resume`) — совпало. Исчерпанность: ⚠ **РАСХОЖДЕНИЕ ЗАКРЫТО (испр. 02.09)** — `Resume` больше не отвечает `202` на исчерпанный прогон. Реконсилятор различает ДВА вердикта, и оба доезжают до клиента кодом 409 `run_not_resumable`: `ceilingSpent` → `cause.code: ceiling_reached` и `creditUnavailable` → `cause.code: credit_unavailable` (`platform/internal/runs/reconcile.go`, греп `ceilingSpent`; `platform/internal/httpapi/v0.go`, греп `run_not_resumable`). Молчаливый `202` на действие, которое ничего не сделало, — ровно то, от чего предупреждает собственный комментарий платформы; клиенту нечем отличить успех от no-op, а на `awaiting_bank` это ещё и не вызывает `ReleaseBankStop`. Полная таблица по статусам — в описании `resumeRun` | **вход P7** (правка построенного пути, не только читающей поверхности) |
|
||||
| `POST /runs/{id}/resume` | реконсилятор | ПОСТРОЕНО, но **0.3.0 сменил поведение на паузе по потолку, а 0.4.0 — на ИСЧЕРПАННОМ прогоне**. Пауза: платформа уже отвечает `409` `ceiling_reached` (`runs/reconcile.go`, ветка `case "paused"` в `Resume`) — совпало. Исчерпанность: ⚠ **РАСХОЖДЕНИЕ ЗАКРЫТО (испр. 02.09)** — `Resume` больше не отвечает `202` на исчерпанный прогон. Реконсилятор различает ДВА вердикта, и оба доезжают до клиента кодом 409 `run_not_resumable`: `ceilingSpent` → `cause.code: ceiling_reached` и `creditUnavailable` → `cause.code: credit_unavailable` (`platform/internal/runs/reconcile.go`, греп `ceilingSpent`; `platform/internal/httpapi/v0.go`, греп `run_not_resumable`). Молчаливый `202` на действие, которое ничего не сделало, — ровно то, от чего предупреждает собственный комментарий платформы; клиенту нечем отличить успех от no-op, а на `awaiting_bank` это ещё и не вызывает `ReleaseBankStop`. Полная таблица по статусам — в описании `resumeRun` | **вход P7** ⚠ ИЗРАСХОДОВАН (D39.153) (правка построенного пути, не только читающей поверхности) |
|
||||
| `GET /usage` | кредиты | ПОСТРОЕНО, **не читается ни одним экраном** | зона фронта |
|
||||
> ⚠ **ТАБЛИЦА ПЕРЕ-СНЯТА ПРОТИВ КОДА 22.08 (оркестратор №18, аудит доков): шесть строк объявляли НЕ ПОСТРОЕННЫМ то, что пак P7 построил, а P8 сохранил.** Правило §Б-21 требует вести здесь статус построенного — оно нарушалось пятый раз подряд, потому что носитель «вход P7» никто не гасил при лендинге. Носитель израсходован: пак P7 принят D39.153, пак P8-FIX — D39.154.
|
||||
|
||||
| `GET /capabilities` | конфигурация деплоя | **ПОСТРОЕНО P7** — маршрут смонтирован безусловно (`platform/internal/httpapi/v0.go`, таблица `contractSurface`), хендлер `capabilities.go`; версия контракта запинена ГЕЙТОМ против ЭТОГО канона (`platform/internal/gates/contract_test.go`) | закрыто D39.153 |
|
||||
| `PATCH`/`DELETE /books/{id}`, `GET /runs/{id}` | колонки есть | НЕ ПОСТРОЕНО (заведено 0.3.0) — факт верен: роутер монтирует 15 операций из 20 | ⚠ носитель «вход P7» ИЗРАСХОДОВАН (пак P7 принят D39.153); живой носитель — `platform/BACKLOG.md` П-17 и очередь CURRENT-STATE |
|
||||
| `GET /books/{id}/chapters`, `/units` | материализация манифеста | **ПОСТРОЕНО P7** — `httpapi/reading.go`, материализатор `internal/readmodel` | закрыто D39.153 |
|
||||
| `GET /books/{id}/notes` | `unit_done` несёт флаг и причину (`runevents.go:126-135`), платформа хранит (`sink.go:227-233`), колонка `notes.reason` заведена под это | канал ЕСТЬ; не хватает карты «причина → код → фраза» (приложение А) и проекции | приложение А + вход P7 |
|
||||
| `GET /books/{id}/notes` | `unit_done` несёт флаг и причину (`runevents.go:126-135`), платформа хранит (`sink.go:227-233`), колонка `notes.reason` заведена под это | канал ЕСТЬ; не хватает карты «причина → код → фраза» (приложение А) и проекции | приложение А + ⚠ носитель «вход P7» ИЗРАСХОДОВАН (D39.153) |
|
||||
| `GET /books/{id}/bank` | движок пишет сайдкар всего банка (`pipeline/bankexport.go:16-33,72`, D39.122) | ⚠ пере-снято 0.5.0: проекция платформы ПОСТРОЕНА (P7 — маршрут в `contractSurface`, `wireBankPage` в `httpapi/reading.go`, `SaveBank` в `pgstore`; прежняя запись «не хватает проекции» устарела при израсходованном носителе «вход P7», D39.153); форма синхронна канону с лендингом P9: счётчики `pending_decisions`/`complete` сняты с проекции (`PD-399`) | закрыто D39.162 |
|
||||
| ~~`POST /bank/decisions`~~ | стоп-механика майнера | ⚠ **НЕ «не построено», а ОТМЕНЕНО**: было построено P7 и СНЯТО 22.08 вместе с пер-термной моделью подписи (D39.144, слово владельца). **0.5.0 снёс и канон-половину — `PD-370` закрыт этим минором**; преемник — строка `POST …/bank/corrections` ниже | отменено D39.144; снесено 0.5.0 |
|
||||
| `POST /books/{bookId}/bank/corrections` | `tmctl bank-apply` — движковая половина ПОСТРОЕНА (D39.158, лендинг `d1eb8a9`) | **ПОСТРОЕНО пакетом P9**: перевод словаря (`platform/internal/ingest/bankdecisions.go`), спавн глагола (`runner/bankapply.go`), раскладка отказов и пер-книжная сериализация (`runs/bank.go`), дверь синхронная. Флаг `bank_corrections_enabled` следует включённости прогонов (`cmd/tmplatformd/runner.go:195`) — дверь спавнит тот же глагол | закрыто D39.162 |
|
||||
|
|
@ -995,13 +995,13 @@ into the generated client's source**» (§Boundaries). Поймано линзо
|
|||
| `Idempotency-Key` | — | **ПОСТРОЕНО P7** — `httpapi/idempotency.go` + `pgstore/idempotency.go`, на двух создающих вызовах; ⚠ живой дефект под конкуренцией — `PD-369` | закрыто D39.153 |
|
||||
| `bearerToken` — чем ВЫДАЁТСЯ токен | вход только ставит HttpOnly-куку (`login.go:338`) | сервер токен ПРИНИМАЕТ, выдать его нечем | носитель: research/28 §2 (Б-15); строки нет |
|
||||
| `Problem.localized` | — | объявлено, ни одним кодом не используется | носитель: research/28 §8 п.4 |
|
||||
| `Note.code` как enum спеки | карта приложения А | не enum, пока не написаны фразы | ⚠ **прежний носитель «строка 148» МЁРТВ** — строку удалил `a023e39` решением владельца 21.08 (тот же факт этот док уже несёт ниже, в §6в); живой носитель — строка бэклога **204** (словарь фраз) |
|
||||
| `Note.code` как enum спеки | карта приложения А | не enum, пока не написаны фразы | ⚠ **прежний носитель «строка 148» МЁРТВ** — строку удалил `a023e39` решением владельца 21.08 (тот же факт этот док уже несёт ниже, в §6в); живой носитель — строки бэклога **203 + 204** (словарь фраз) |
|
||||
| Настоящие названия глав (`Chapter.heading` ≠ null) | парсер структуры | НЕ ПОСТРОЕНО | строка 160 (Этап 0) |
|
||||
| `title_raw` / `kind` (глава ↔ фрагмент) | дизайн-пак структуры глав | передано паку, аддитивно | строка 161 |
|
||||
| `ErrorCode.content_refused` (400) **и** `RejectReason.content_refused` | прескрин злоупотреблений | НЕ ПОСТРОЕН ни на одной стороне: в платформе только объявление константы (`httpapi/problem.go:42,94`), `ContractRejectReason` (`ingest/vocabulary.go:59-69`) его не отображает; в движке отказ провайдера живёт как ПРИЧИНА ЗАМЕЧАНИЯ (`disposition.go:60-63` → `Note.code: content_withheld`) и в exit-контракт не выходит — мостá между двумя словарями нет | **строка 94 (ПТ-16)**; там же ограничение числа попыток аккаунта — обязанность падает ВМЕСТЕ с производителем, не раньше |
|
||||
| `decline` в подписи банка доезжает до работы | ⚠ пере-снято 0.5.0: старый носитель («таблица `bank_decisions`, движок её не читает») умер вместе с моделью — таблица снесена 22.08, предупреждение на `BankDecision.action` снесено вместе со схемой | дверь смонтирована (D39.162), и decline доезжает до следующего прогона ПО ПОСТРОЕНИЮ. ⚠ **Остаток ДВИЖКОВЫЙ, две штуки, обе найдены воркфлоу-ревью P9:** decline не энтити-широк на обратном пути (отклонённая сущность возвращается через свой АЛИАС, `mining.go:548`), и повтор ТОГО ЖЕ документа на одном пути не сходится (`membank/decisions.go:374`) — второе ломает обещание сходимости, на котором стоит синхронная дверь | заказано бэкенд-паку «тихая порча», `../../archive/prompts/BACKEND_SILENT_HARM_SESSION_PROMPT_2026-08-28.md` §3.3 | ⚠ пере-снято 30.08: из двух движковых остатков ВТОРОЙ ЗАКРЫТ — порядок записи документов решений сменён на rejects-first, повтор принятого документа СХОДИТСЯ (D39.164 §3.3). Живым остаётся ОДИН: `decline` не энтити-широк на обратном пути — отклонённая сущность возвращается через свой АЛИАС, тогда как канон обещает «declining a surface removes EVERY window of that surface». Носитель — строка 228 единого бэклога.
|
||||
| Снятие замечания (переход «флаг снят») | движок | **НЕДОСТИЖИМО сегодня, проверено чтением движка** — п. H §6в | **PD-298** регистра платформы (`platform/docs/DEFECT_REGISTER.md`) — там строка и живёт; механизма не строим |
|
||||
| Счёт «сделанного» на деплое без второго прохода | платформа | канон 0.4.0 определил «сделано» = последний проход ЭТОГО деплоя; проекция платформы считает жёстко второй проход | **вход P7** (PD-202) |
|
||||
| Счёт «сделанного» на деплое без второго прохода | платформа | канон 0.4.0 определил «сделано» = последний проход ЭТОГО деплоя; проекция платформы считает жёстко второй проход | **вход P7** ИЗРАСХОДОВАН (D39.153) (PD-202) |
|
||||
|
||||
⚠ **Три прежних предупреждения СНЯТЫ как устаревшие** (Б-7а), и это причина, по которой заведена
|
||||
таблица выше:
|
||||
|
|
@ -1017,7 +1017,7 @@ into the generated client's source**» (§Boundaries). Поймано линзо
|
|||
`paused`», — и не называла НИКАКОГО другого действия. Первая половина верна: `resume` действительно
|
||||
не двигает такой прогон. Вторая — нет: стоп по потолку ЗАКРЫВАЕТ прогон, `finished_at` пишется тем же
|
||||
оператором (`pgstore/runs.go:672-676`), `paused` входит в допустимые для старта состояния
|
||||
(`runs/runs.go:227-231`, allowlist `readyToTranslate`), `HasLiveRun` при этом ложь — то есть **новый
|
||||
(`runs/runs.go` (греп по имени функции), allowlist `readyToTranslate`), `HasLiveRun` при этом ложь — то есть **новый
|
||||
прогон с бОльшим потолком запускается и является лечением уже сегодня**. Пользователь видел тупик там,
|
||||
где его нет, на самом частом остановочном состоянии. В 0.3.0 лечение записано в `startRun` и в
|
||||
`resumeRun`, а `resume` после потолка отвечает 409 с `cause.code: ceiling_reached`.
|
||||
|
|
@ -1262,7 +1262,7 @@ into the generated client's source**» (§Boundaries). Поймано линзо
|
|||
именем, а фраза §2.14 пропала именно там, где имени не было (`/auth/*` — не поле). Носитель: эта
|
||||
запись.
|
||||
|
||||
### A. Прогон с исчерпанным бюджетом (PD-282) — ПРАВЛЮ КАНОН; половину мнения отклоняю
|
||||
### A. Прогон с исчерпанным бюджетом (PD-282 ⚠ ЗАКРЫТО (PD-282 `fixed`, акт 5; разбор — §3)) — ПРАВЛЮ КАНОН; половину мнения отклоняю
|
||||
|
||||
**Факт подтверждён и оказался шире записки.** `reopen` даёт `exhausted` в ДВУХ местах, а не одном
|
||||
(`runs/reconcile.go`): `remaining <= 0` и `ErrInsufficientCredit` от `RestartRun` — то есть
|
||||
|
|
@ -1425,7 +1425,7 @@ focus»), то есть цена платится на горячем пути
|
|||
получает. Записано в `Progress` и в `Book.chapters_done` — вместе с доводом: контракт не говорит,
|
||||
сколько проходов бывает, значит и назвать один из них для счёта не может, а обещание «дробь
|
||||
доходит до единицы» — это обещание, а не проходы. Имён волн в тексте нет (гейт §5 пере-ран, чисто).
|
||||
Форма не меняется, генерённые типы не двигаются; работа — проекция платформы, вход P7.
|
||||
Форма не меняется, генерённые типы не двигаются; работа — проекция платформы, вход P7 ⚠ (носитель израсходован, D39.153).
|
||||
|
||||
### H. Снятие замечания (PD-298) — СВЕРЕНО С ДВИЖКОМ ПЕРВЫМ, как просила зона; механизма НЕ строим
|
||||
|
||||
|
|
@ -1643,7 +1643,7 @@ heartbeat · форма `id` кадра. Сжатие как ТРЕБОВАНИ
|
|||
26,1 КБ → 10,4 КБ; дерево глав 250 КБ → 39 КБ; банк 1000 строк 167 КБ → 17 КБ.
|
||||
- **Порядок работ по эффекту на килобайт усилия** (research/28 §5б, строка 186): сжатие → `ETag`/304
|
||||
→ скоуп в кадре → дельта-чтения `?after_version=` → `staleTime` у клиента. Шаги 3–4 — уже в
|
||||
контракте (0.3.0), шаги 1–2 — конфигурация, шаг 5 — зона фронта.
|
||||
контракте (0.3.0), шаги 1–2 — ⚠ **сжатие УЖЕ ПОСТРОЕНО в Go платформой** (`conditional.go`, греп `gzipFloor`), конфигурацией остаётся только edge, шаг 5 — зона фронта.
|
||||
- **Транспорт НЕ меняется** (проверено независимым агентом другого тира + сверка первоисточников):
|
||||
наша нагрузка — художественный текст, и после gzip разница между JSON и protobuf единицы процентов;
|
||||
gRPC-web требует прокси и теряет `If-None-Match`/304; Connect возвращает то, что у нас уже есть.
|
||||
|
|
@ -1721,7 +1721,7 @@ heartbeat · форма `id` кадра. Сжатие как ТРЕБОВАНИ
|
|||
| `run_in_flight` | 409 | `pgstore.ErrRunInFlight` (`v0.go`) |
|
||||
| `book_not_ready` | 409 | `runs.ErrBookNotReady` (`v0.go`) |
|
||||
| `run_not_stoppable` | 409 | `runs.ErrNotStoppable` (`v0.go`) |
|
||||
| `run_not_resumable` | 409 | `runs.ErrNotResumable`; `cause`: `ceiling_reached` — **с 0.4.0 это же ответ на ИСЧЕРПАННЫЙ прогон в `stopped`/`awaiting_bank`, где платформа сегодня молча отвечает `202`** (A, PD-282: `runs/reconcile.go`, ветка `exhausted` функции `reopen` и её чтение в `Resume`). ⚠ `bank_decisions_incomplete` удалён D39.144 — гейта полноты нет; построенный гейт полноты ДЕМОНТИРОВАН (0.5.0, сверено с кодом: `reconcile.go`, ветка `case "awaiting_bank"` снимает стоп при ЛЮБОМ состоянии решений, комментарий «this is the built half being dismantled with it») |
|
||||
| `run_not_resumable` | 409 | `runs.ErrNotResumable`; `cause`: `ceiling_reached` — **с 0.4.0 это же ответ на ИСЧЕРПАННЫЙ прогон в `stopped`/`awaiting_bank`, где платформа сегодня молча отвечает `202`** ⚠ (ЗАКРЫТО 02.09: `Resume` больше не отвечает 202 — вердикты `ceilingSpent`/`creditUnavailable` едут 409 `run_not_resumable`, см. §3) (A, PD-282: `runs/reconcile.go`, ветка `exhausted` функции `reopen` и её чтение в `Resume`). ⚠ `bank_decisions_incomplete` удалён D39.144 — гейта полноты нет; построенный гейт полноты ДЕМОНТИРОВАН (0.5.0, сверено с кодом: `reconcile.go`, ветка `case "awaiting_bank"` снимает стоп при ЛЮБОМ состоянии решений, комментарий «this is the built half being dismantled with it») |
|
||||
| `ceiling_unavailable` | 409 | `runs.ErrCeilingOutOfBounds` + `pgstore.ErrInsufficientCredit` (`v0.go`); `cause`: `bounds_moved` · `credit_held`; несёт `blocked` |
|
||||
| `idempotency_conflict` | 409 | форма заведена батчем; реализация — P7 |
|
||||
| `bank_corrections_refused` | 409 | объявлен 0.5.0 ДО производителя; производитель — монтаж двери правок (пак (2в) очереди D39.156): раскладка отказа класса 14 движка (`tmctl bank-apply`, документ прочитан и отклонён целиком — пользователь пере-решает) |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue