# 🧹 Свести норму схемы со служебной таблицей goose

- **Тип:** chore
- **Категория:** Очередь — Та же окрестность, что и сведение документов: норма схемы объявлена в database.md, а держит её сторож
- **Зачем:** Таблица учёта goose_db_version несёт второй вид времени и своё умолчание, а норма схемы объявлена абсолютной; сторож перечисляет наши таблицы поимённо и служебной не видит вовсе.
- **Теги:** review-2026-08-23, question

Норма схемы объявлена абсолютной: [database.md](../../docs/database.md)
описывает таблицы сервиса, а сторож `internal/archrules` перечисляет их поимённо
и сверяет с применённой схемой. Таблицы учёта `goose_db_version` в этом перечне
нет, и она под норму не подпадает: время в ней своего вида, у колонки своё
умолчание — то и другое ставит goose, а не мы.

Сегодня расхождение молчит: сторож смотрит только на названные таблицы. Стоит
ему начать смотреть на применённую схему целиком, и он покраснеет на таблице,
которую мы не заводили и править не можем.

Исход — выбор нормы, а не правка кода: либо требование сужается и называет
таблицу учёта прямо, либо сторож расширяется на всю применённую схему с
поимённым исключением.

Нашёл проход `review-specs` (S2) ревью change
`2026-08-23-storage-without-pocketbase`.

## Затрагивает

- [docs/database.md](../../docs/database.md) — формулировка нормы схемы;
- спека `storage` — требование о составе схемы;
- сторож `internal/archrules` — перечень таблиц и то, что он сверяет;
- каталог шагов `internal/adapter/repo/sqlite/migrations` — только чтением.

## Критерии приёмки

- Норма схемы называет таблицу учёта явно: либо как исключение, либо как
  предмет. **Оракул:** чтение `docs/database.md` и спеки рядом — про
  `goose_db_version` сказано, чья она и почему её колонки другие.
- Сторож судит то, что объявлено нормой, и краснеет на расхождении. **Оракул:**
  мутация — завести колонку мимо шага схемы либо снять таблицу из перечня, и
  `go test ./internal/archrules/` краснеет.
- Служебная таблица сторожа не роняет. **Оракул:** `task gate` зелёный на
  применённой схеме целиком.

## Вопросы

- Что становится нормой: сузить требование и назвать таблицу учёта goose
  исключением — или расширить сторож на всю применённую схему с поимённым
  исключением? Первое дешевле и оставляет сторожа слепым к таблице, заведённой
  мимо шага схемы; второе ловит такую таблицу, но требует держать перечень
  исключений.

## Рамки

Применённые шаги схемы не переписываются. Сама goose не заменяется и её таблица
учёта не переименовывается.
