From e3975858ccc418ca25e40ade866f7e6bb2f33ed7 Mon Sep 17 00:00:00 2001 From: heaven Date: Sun, 30 Aug 2026 21:31:50 +0300 Subject: [PATCH] Add expectation tokens to the eleven anchors the pre-commit gate named in the P12 prompt --- docs/PLATFORM_P12_SESSION_PROMPT.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/PLATFORM_P12_SESSION_PROMPT.md b/docs/PLATFORM_P12_SESSION_PROMPT.md index b8b9ba69..45afb559 100644 --- a/docs/PLATFORM_P12_SESSION_PROMPT.md +++ b/docs/PLATFORM_P12_SESSION_PROMPT.md @@ -45,14 +45,14 @@ D39.165 §1) · эскроу П-18 · перф-строки `PD-412`/`PD-413`. ### 3.1 `PD-425` — обрыв клиента теряет запись о правке банка навсегда (деньги, делай РОВНО так по классу) -Дверь коррекций пишет пост-verb факт (`RecordBankMove`) на контексте ЗАПРОСА (`internal/httpapi/bank.go:149`): +Дверь коррекций пишет пост-verb факт (`RecordBankMove`) на контексте ЗАПРОСА (`internal/httpapi/bank.go:149`=`ApplyBankCorrections`): клиент закрыл вкладку до ответа — запись не легла, `bank_moved_at` NULL навсегда, второго писателя и свипа нет; дальше обычный прогон допускается без `--resnapshot` и умирает на снапшот-гарде движка ПОСЛЕ взятия холда. Средство «503, пере-шли документ» недостижимо — клиента уже нет. **Класс лечения зона назвала сама и уже дважды применила:** `WithTimeout(WithoutCancel(ctx), …)` — `platform/internal/httpapi/idempotency.go:151`=`WithoutCancel` (`settleCtx`; комментарий `:147-149` — дословно -про обрыв клиента) и `internal/books/books.go:205,215` (`writeCtx`, тело — `internal/books/parse.go:271-272`). -⚠ Тело `PD-425` в регистре несёт БИТЫЙ якорь `pgstore/idempotency.go:150` (там чтение ключа, detach нет) — +про обрыв клиента) и `internal/books/books.go:205,215`=`writeCtx` (тело — `internal/books/parse.go:271-272`=`WithoutCancel`). +⚠ Тело `PD-425` в регистре несёт БИТЫЙ якорь `pgstore/idempotency.go:150`=`Location` (там чтение ключа, detach нет) — пере-нацель его той же правкой регистра (гигиена §3.9). Делай тем же классом; деталь (таймаут, что именно накрывается) — реши сам и аргументируй. Пины свои: посадка «контекст отменён между verb и записью» обязана красить дефект и зеленеть с фиксом. @@ -93,7 +93,7 @@ D39.165 §1) · эскроу П-18 · перф-строки `PD-412`/`PD-413`. Write-гард уже закрыт (F12, `ErrNotResumable`, пин `TestAnOlderRunCannotBeResumedOverANewerOne`); осталась read-половина: `lastRun` берёт `order by started_at desc` — живой прогон обязан иметь приоритет над финишировавшим в карточке/полосе. ⚠ У `lastRun` ДЕСЯТЬ мест склейки на 30.08 (десятое — -`pgstore/runs.go:132`, добавлено 28.08 ПОСЛЕ счёта «девять» из PD-44; пере-сочти сам грепом паттерна +`pgstore/runs.go:132`=`lastRun`, добавлено 28.08 ПОСЛЕ счёта «девять» из PD-44; пере-сочти сам грепом паттерна склейки, не голым словом — голое ловит комментарии) и он в ⛔-зоне sqlc — правка судится СВОИМИ тестами по каждому месту, не «зеленью батареи». @@ -119,7 +119,7 @@ Write-гард уже закрыт (F12, `ErrNotResumable`, пин `TestAnOlderR ### 3.6 `PD-431` + `PD-432` — честность носителей (делай РОВНО так) -- `PD-431`: `Touch` (`internal/pgstore/sessions.go:49`) выбрасывает `RowsAffected` — апдейт в ноль строк +- `PD-431`: `Touch` (`internal/pgstore/sessions.go:49`=`func (s *Store) Touch`) выбрасывает `RowsAffected` — апдейт в ноль строк неотличим от успеха, скольжение окна бездействия не проверяет ни один живой тест. **Слово оркестратора: поведение НЕ менять** (ноль строк — законная гонка с отзывом); лечение — честность проверки: запинить скольжение окна СКВОЗНЫМ тестом через `auth.Authenticator` с живым @@ -144,8 +144,8 @@ migrate` по каждой стендовой книге зоны → сними **Состав снятия — по пингу №21, он ШИРЕ спавна:** (а) особый случай в спавне — `platform/internal/runs/spawn.go:170`=`!l.BankReleased` — снять РОВНО; (б) писатель `LiftBankStop` -(`internal/runs/reconcile.go:1304`, `pgstore/runs.go:1180`) и (в) колонка `bank_released` с читателями -полосы (`pgstore/readmodel.go:393,498,961`) — реши сам, этим ли паком: снос = НОВАЯ миграция (00016 не +(`internal/runs/reconcile.go:1304`=`LiftBankStop`, `pgstore/runs.go:1180`=`bank_released`) и (в) колонка `bank_released` с читателями +полосы (`pgstore/readmodel.go:393,498,961`=`bank_released`) — реши сам, этим ли паком: снос = НОВАЯ миграция (00016 не править) + пере-вывод сегмента полосы; (б)/(в) сцеплены — снять писателя, оставив колонку, значит заморозить `bank_released=false` и врать полосой (ось §5); не этим паком — диспозиция строкой, как у `PD-411`. ⚠ **Снимаемое поведение ЗАПИНЕНО:** `TestAResumedRunIsSpawnedWithoutTheSigningStop` @@ -161,7 +161,7 @@ l.VerifyBank unconditionally», т.е. ровно заказанная прав `books/bk_WIUSGBQTIGWE4ZBY`; бинари в `bin/`, `tmctl` — `~/.local/bin/tmctl`); `W=~/tmstand-work` в рецепте — шаблон. Живой `tmplatformd` — демон ЗАКРЫТОЙ сессии оркестратора №19: убей по PID (⚠ не `pkill -f` — инцидент P11) и подними свой свежесобранный. Для живого пробоя $0-пары подними СВОЮ -заглушку на `127.0.0.1:11434` (образец — `platform/internal/runner/translate_resnapshot_live_test.go:41`; +заглушку на `127.0.0.1:11434` (образец — `platform/internal/runner/translate_resnapshot_live_test.go:41`=`Listen`; ollama на хосте нет) и ⚠ гаси её на время `make check`: тест второго гейта при занятом порту скипается, а требование — скипов 0. @@ -180,7 +180,7 @@ ollama на хосте нет) и ⚠ гаси её на время `make check` Закрыть `PD-427` (комментарий уже исправлен 29.08 — акт закрытия) и `PD-203` («предложено закрыть» ещё P8-REVIEW; проверь предикат и закрой либо оспорь) · перенести `PD-380` и `PD-44` (обе fixed) из-под чужих заголовков «Открытые» · завести строку на НЕПОКРЫТУЮ гоночную ветку `errIdentityRace` -(`pgstore/identity.go:99-113` — ретрай при `on conflict … do nothing`, гонка двух первых логинов одной +(`pgstore/identity.go:99-113`=`race` — ретрай при `on conflict … do nothing`, гонка двух первых логинов одной новой identity; ни один тест её не касается, все тестовые вызовы последовательные) с диспозицией: запинить конкурентным тестом ЛИБО доказать недостижимость; ⛔ снос — только с доказательством: ветка обслуживает ЛЕГИТИМНУЮ гонку логина, её снос = 500 на легитимном пути (класс §3.5) · `PD-422` НЕ