From a1ce42200c449d51e8622bb08a9f1a3932b6c3b6 Mon Sep 17 00:00:00 2001 From: heaven Date: Sun, 23 Aug 2026 02:01:59 +0300 Subject: [PATCH] Apply the refuter's four blockers to the seam pack prompt: backlog rows are ids not file lines, the zone pings are fenced out, paid calls are zero, and both platform knowledges close --- docs/BACKEND_SEAM_PACK_SESSION_PROMPT.md | 59 +++++++++++++++++++----- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/docs/BACKEND_SEAM_PACK_SESSION_PROMPT.md b/docs/BACKEND_SEAM_PACK_SESSION_PROMPT.md index 3d442f2c..a08b7d99 100644 --- a/docs/BACKEND_SEAM_PACK_SESSION_PROMPT.md +++ b/docs/BACKEND_SEAM_PACK_SESSION_PROMPT.md @@ -29,17 +29,21 @@ ## 2. Зона записи и git Пишешь ТОЛЬКО в `backend/`. Читать можешь всё; `platform/`, `frontend/`, `eval/`, `docs/` — чужие зоны, -правки в них запрещены. **Ты не коммитишь** — дерево готовишь и передаёшь на лендинг оркестратору +правки в них запрещены. **Единственное исключение:** пинги и итог сессии — в `docs/PROGRESS.md`, секция +«Бэкенд» (своего журнала у зоны нет). Больше в `docs/` не пишешь ничего. **Ты не коммитишь** — дерево готовишь и передаёшь на лендинг оркестратору (канон git-норм — `CLAUDE.md`). `git add -A`, `git add .`, `git commit -a` запрещены в любом случае. В дереве живёт незакоммиченная работа параллельных сессий — не трогай её и не «прибирай». -⚠ Пинги и итоги — в `docs/PROGRESS.md`, секция «Бэкенд» (у зоны бэкенда своего журнала нет). ## 3. Карта чтения (пять позиций, больше не нужно) 1. **`docs/architecture/17-seam-inbound-law.md`** — ратифицированный закон входной двери. Это твой контракт: семь пунктов, каждый с прецедентом. Читать ЦЕЛИКОМ и до кода. 2. **`docs/architecture/05-decisions-log.md`, нота D39.156** — почему закон такой и что он закрыл. -3. **`docs/PROGRESS.md`, строки 199, 211, 212, 213** — предметные хвосты твоего пака. +3. **`docs/PROGRESS.md` — строки БЭКЛОГА 199, 211, 212, 213** (предметные хвосты пака). + ⚠ **Это ID строк ТАБЛИЦЫ, а не номера строк файла.** Брать грепом `^| 199 |`, `^| 211 |` и так далее. + Буквальный `sed -n '199p'` даст совсем другой текст — правдоподобный, но чужой, и заказ ты прочитаешь неверно. + ⚠ В теле строки 199 лежат ТРИ мины формата, которые обязана знать сессия, пишущая писателя этих файлов: + явный `status: approved` · терм без `dst` · кап реверс-секции. Прочитать до кода. 4. **`docs/experiments/00-provider-quirks.md`** — обязательное пре-чтение перед любым касанием вызовов провайдеров (тебя касается через `--keys-file`). 5. **`docs/architecture/12-go-style-notes.md`** — норматив общности: Go-логика НЕ ветвится по паре @@ -48,11 +52,19 @@ **Код первичен.** Все `file:line` ниже — отправные точки, а не истина: открывай и проверяй сам. Всю документацию этого проекта писали нейросети, она ошибается, и уже ошибалась в этих самых местах. +## 3а. Что в секции «Бэкенд» — НЕ твой заказ (пропуск подписывается пропуском) + +В `docs/PROGRESS.md`, секции «Бэкенд», висят два пинга твоей зоне. **Ни один из них в этот пак не входит:** +пинг про потерю инъекции банка на эскалации в Gemini (строки 208/210, родня 193) и пинг про разошедшиеся +с деревом `backend/README.md` и `components.puml`. Не трогай их и не «допиливай попутно» — это скоуп-крип, +и ответ полигону по Gemini даст отдельный промт. Если по ходу работы увидишь, что твой пак ломает или +чинит что-то из них, — пинг, а не тихая правка. + ## 4. Состав пака и разметка свободы ### 4.1 Конвенционные дефолты двух путей — ДЕЛАЙ РОВНО ТАК -Пустые `mined_delta` / `mined_rejects` движок доставляет сам, по конвенции каталога книги. Механизм +Пустые КЛЮЧИ КОНФИГА `mined_delta` / `mined_rejects` движок доставляет сам, по конвенции каталога книги (речь о незаполненном ключе, а не о создании пустых файлов). **Имена дефолтных файлов решаешь сам** — важно, что конвенция одна и живёт в движке. Механизм уже существует для базы проекта — повторить его: `backend/internal/config/book.go:163-167`=`b.ProjectDB = filepath.Join(dir, b.BookID+".db")`. Прецедент опционального конвенционного YAML-входа тоже есть: @@ -64,7 +76,7 @@ ### 4.2 Глагол приёма правок банка — РЕШИ САМ форму, ДЕЛАЙ РОВНО ТАК семантику -Новый $0-глагол `tmctl`. Прецедент глаголов без прогона есть (`migrate`, `backup`, `seed-lint`). +Новый $0-глагол В `tmctl`. Прецедент глаголов без прогона есть (`migrate`, `backup`, `seed-lint`). **Имя, разбиение на подкоманды, схему входа и формат ответа решаешь ты** и аргументируешь в отчёте. Ориентир: вход — решения в словаре уже публикуемой движком поверхности (стабильные id банк-экспорта @@ -81,10 +93,12 @@ - **Два решения по одному терму в одном вызове — отказ всего вызова как ill-formed.** - **Конфликт с подписанной строкой сида — отказ С ИМЕНЕМ**, молча принять нельзя: это заминирует следующий прогон. -- **Проекция ДО мутации.** Мутирующий глагол сначала говорит, что произойдёт и почём. +- **Проекция ДО мутации, получаемая БЕЗ мутации.** Закон говорит «почём до ПОДТВЕРЖДЕНИЯ», прецеденты — + смета с порогом согласия и `--dry-run`. Формулировку «напечатал и тем же вызовом записал» считать + НЕисполнением. Форму (режим, флаг, отдельная подкоманда) **решаешь сам и аргументируешь**. - **Занятый лок — отказ РОВНО классом 12**, не 10. Полоса различает их не косметически: 10 значит «деплой сломан, чинит человек, книги ждут», 12 значит «ничего не произошло, подожди и повтори» - (`platform/internal/ingest/exit.go:58`=`ExitProjectLocked = 12` — читать, не править, чужая зона). + (в твоей зоне тот же класс уже назван: `backend/cmd/tmctl/main.go:68`=`another tmctl owns this project right now`; платформенная сторона — `platform/internal/ingest/exit.go:58`=`ExitProjectLocked = 12`, читать, не править). - **Арбитр гонок — тот же flock проекта**, что держит прогон: `backend/internal/store/store.go:55`=`EXCLUSIVE flock on`. Брать неблокирующе. ⚠ Это не перестраховка: движок пере-читает сид ПОСРЕДИ прогона, запись в живой прогон въехала бы @@ -122,18 +136,30 @@ ### 4.5 Путь артефакта и версия в `status --json` — РЕШИ САМ форму -Платформа сегодня вынуждена сама вычислять путь базы книги, дублируя движковую конвенцию (строка 213). -Отдай ей путь — аддитивным полем, форму выбираешь ты. Тем же касанием закрой асимметрию: банк-экспорт +Платформа сегодня знает о твоей стороне ДВЕ вещи, и закрыть надо ОБЕ (строка 213): она сама вычисляет путь +базы книги, дублируя движковую конвенцию, И знает суффикс твоего артефакта +(`platform/internal/runner/artifacts.go:37`=`os.Open(db + ".bank.json")` — читать, не править, чужая зона). +Отдай ей ПУТЬ БАНК-ЭКСПОРТА (и путь базы, если сочтёшь нужным) аддитивным полем — форму выбираешь ты. +⚠ Пере-именование банк-экспорта в фикс-имя — ЛОМАЮЩЕЕ, его окно — строка 161, сюда не тащить. Тем же касанием закрой асимметрию: банк-экспорт и манифест версию документа несут (`backend/internal/pipeline/bankexport.go:33`=`const bankExportVersion = "tm-bank-v1"`), а `status --json` — нет. +## 4.6 Деньги: платных вызовов в паке НОЛЬ — ДЕЛАЙ РОВНО ТАК + +Санкции на платные вызовы у пака нет и не запрашивается. Глагол банка $0 по построению. `--keys-file` +доказывается юнит-тестами и пробой с ФЕЙКОВЫМИ ключами (проверяется, что путь резолвится, файл читается, +порядок цепочки соблюдён), а не живым `translate`. **Рантайм-вердикт по платному пути остаётся PLAUSIBLE — +это ожидаемый исход, а не дефект отчёта**; так и напиши. Упёрся в место, где без денег не доказать, — +пинг с названной суммой, не трата. + ## 5. Мандат самопроверки ИСПОЛНЕНИЕМ Не «перечитал» — **исполнил**. Минимум: -- **Батарея целиком** после каждой содержательной правки: `go build ./...`, `go vet ./...`, - `go test ./... -count=1`. Красный тест не «подгоняется»: править или удалять тест, голден или гейт +- **Батарея целиком, ИЗ КАТАЛОГА `backend/`** после каждой содержательной правки: `go build ./...`, + `go vet ./...`, `go test ./... -count=1`. ⚠ `go.mod` в корне репозитория НЕТ — модули раздельные, из корня + батарея не соберётся. Платформенную батарею не гоняешь вовсе: платформу ты не правишь. Красный тест не «подгоняется»: править или удалять тест, голден или гейт ради зелени — НЕДОПУСТИМО; несогласие с тестом — пинг оркестратору, а не правка. - **Собственные адверсариальные посадки ВНЕ твоего списка.** Посади мутации в новый код и убедись, что батарея краснеет: дефолт срабатывает на НЕпустом ключе · частичная запись при отказе одной @@ -147,6 +173,13 @@ - **Артефакт-находки обязателен:** `~/tm-handoff/backend-seam-pack/findings.md` — что посадил, что краснело, что выжило. Абсолютный путь, не скрэтчпад. +### 5.1 Обязательное для кодового пака + +- **Последний абзац отчёта — это план или обещание? Значит сделай его СЕЙЧАС**, а не оставляй следующей сессии. +- **Дифф `^func Test` — исполнением, а не по памяти:** покажи командой, какие тесты добавлены и какие тронуты. +- **Интервальная самоверификация субагентом** против ЯВНЫХ критериев — пак с новым глаголом заведомо длинный, + и к его середине собственный фрейминг перестаёт быть виден изнутри. + ## 6. Оси ревью (три, по характеру работы) 1. **Швовая** — у шва инвентарь ВСЕХ каналов другой стороны делается чтением ЧУЖОГО кода, не по @@ -154,9 +187,11 @@ 2. **Общность** — заработает ли на паре, которой в репо нет, без правки Go. 3. **Деньги** — глагол обязан быть $0. Докажи это ледджером, а не рассуждением. +Ты вправе ЗАМЕНИТЬ любую из осей своей, если аргументируешь, чем твоя лучше ловит дефекты этой работы. + ## 7. Записка-план -До кода — короткая записка: что делаешь, в каком порядке, какие развилки видишь. Комплектность +До кода — короткая записка `~/tm-handoff/backend-seam-pack/plan.md`: что делаешь, в каком порядке, какие развилки видишь. Комплектность против §4 сверяется МЕХАНИЧЕСКИ (таблицей или грепом), а не глазами. ## 8. Заявление = команда