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

This commit is contained in:
heaven 2026-08-23 02:01:59 +03:00
parent 691d9ce79a
commit a1ce42200c

View file

@ -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. Заявление = команда