Шаги схемы вынесены в свой каталог, и сверка их снова видит
- шаги PocketBase переехали из файла в пакет internal/adapter/repo/pocketbase/migrations, файл на шаг с именем зарегистрированного шага; туда же имена коллекций, срок сессии — в provider.go - ключ migrations в docs/.docs.json наведён на этот каталог: прежнее значение указывало на несуществующий migrations/, и шаг гейта проходил зелёным при всякой правке схемы - app.go подключает пакет шагов явным пустым импортом: пропавшая ссылка на константы унесла бы регистрацию, и хранилище поднялось бы без коллекций
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"canon": 14,
|
||||
"migrations": "migrations"
|
||||
"migrations": "internal/adapter/repo/pocketbase/migrations"
|
||||
}
|
||||
|
||||
@@ -74,7 +74,8 @@
|
||||
| Распознаватель | `internal/adapter/recognizer/yandex` | Заливка в Object Storage и отложенное распознавание SpeechKit |
|
||||
| Отправитель Telegram | `internal/adapter/telegram` | Отправка текста, деление длинного по словам |
|
||||
| Репозитории | `internal/adapter/repo/pocketbase` | Задачи и файлы коллекциями хранилища; захват — сырым запросом |
|
||||
| Панель владельца | там же, `panel.go` | Правка задачи в панели проходит те же правила перехода, что и правка из кода |
|
||||
| Шаги схемы | `internal/adapter/repo/pocketbase/migrations` | Файл на шаг, имя файла — имя шага; там же имена коллекций |
|
||||
| Панель владельца | `internal/adapter/repo/pocketbase`, `panel.go` | Правка задачи в панели проходит те же правила перехода, что и правка из кода |
|
||||
|
||||
<!-- канон: поведение → openspec/specs/pipeline; ещё НЕ переехало: спека заведена, но это в ней не описано -->
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ htmx, а здесь решено делать SPA — и перенесённы
|
||||
| Форматирование исходников | `.golangci.yml` → `gofmt` |
|
||||
| Подозрительные конструкции языка | `.golangci.yml` → `govet`, `staticcheck`, `ineffassign`, `unused` |
|
||||
| Секреты в коммите | `lefthook.yml` → `gitleaks git --staged` |
|
||||
| Раскладка документов, битые ссылки, миграция без правки `database.md` | `docs.py check` |
|
||||
| Раскладка документов, битые ссылки, изменённый шаг схемы без правки `database.md` | `docs.py check`; каталог шагов задаёт ключ `migrations` в `docs/.docs.json` |
|
||||
| Одно число версии Go в `go.mod`, `Dockerfile`, `CLAUDE.md` и `README.md` | `Taskfile.yml` → шаг `go-version` (`scripts/check-go-version.sh`) |
|
||||
|
||||
Не названное здесь место механизации означает, что проход по конвенциям будет
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
и разбора нет. Правила действуют на новый код; переписывание существующего —
|
||||
отдельная работа, и до неё расхождение читается как долг, а не как нарушение.
|
||||
|
||||
**Механизировано:** ничего. Ни правила линтера, ни теста-сканера под эти пункты
|
||||
в transcriber нет.
|
||||
**Механизировано:** одно — сверка изменённого шага схемы с
|
||||
[../database.md](../database.md), шаг гейта `docs.py check`
|
||||
([README.md](README.md), «Механизировано»). Под прочие пункты ни правила
|
||||
линтера, ни теста-сканера в transcriber нет.
|
||||
|
||||
## Первичные ключи — ULID, не автоинкремент
|
||||
|
||||
@@ -55,8 +57,9 @@
|
||||
лексикографическую сортировку TEXT, то есть хронологию (`ORDER BY created_at`).
|
||||
Единая точка генерации — приложение, а не умолчание в схеме: так забытая
|
||||
вставка падает громко. Измерение длительности — не метка времени.
|
||||
- Миграции — шаги PocketBase на Go (`internal/adapter/repo/pocketbase`):
|
||||
коллекции и их поля заводятся кодом. При изменении структуры обновляем схему
|
||||
- Миграции — шаги PocketBase на Go
|
||||
(`internal/adapter/repo/pocketbase/migrations`, файл на шаг): коллекции и их
|
||||
поля заводятся кодом. При изменении структуры обновляем схему
|
||||
[../database.md](../database.md) тем же изменением.
|
||||
- Время в **сыром запросе** кладётся и сравнивается тем же видом, каким
|
||||
хранилище пишет свои `created`/`updated`. Сравнение строк побайтово, и
|
||||
|
||||
+11
-5
@@ -8,11 +8,17 @@
|
||||
CGO сборке не нужен.
|
||||
|
||||
Схему двигают **шаги миграций PocketBase** на Go, каталог
|
||||
`internal/adapter/repo/pocketbase`, файл шага — `migrations.go`. Шаг
|
||||
регистрируется при загрузке пакета, а накатывается при подъёме хранилища
|
||||
(`pocketbase.New`), прежде чем стартуют воркеры и сервер. Применённый шаг не
|
||||
переписывается — изменение только новым шагом: применённое хранилище считает по
|
||||
имени файла.
|
||||
`internal/adapter/repo/pocketbase/migrations`, файл на шаг и имя файла — имя
|
||||
шага. Шаг регистрируется при загрузке пакета, а накатывается при подъёме
|
||||
хранилища (`pocketbase.New`), прежде чем стартуют воркеры и сервер. Применённый
|
||||
шаг не переписывается — изменение только новым шагом: применённое хранилище
|
||||
считает по имени шага.
|
||||
|
||||
Каталог у шагов свой, а не файл внутри пакета репозитория, и причина внешняя:
|
||||
шаг гейта сверяет изменённые шаги схемы с правкой этого документа по **префиксу
|
||||
пути** (`docs/.docs.json`, ключ `migrations`), а префикс наводится только на
|
||||
каталог. Имена коллекций живут там же, рядом с шагом, который их заводит; пакет
|
||||
репозитория берёт их оттуда.
|
||||
|
||||
**Идентификаторы** записей выдаёт хранилище — 15 знаков собственного алфавита.
|
||||
Свои UUID остались только в **именах файлов**: имя, под которым запись ложится в
|
||||
|
||||
+2
-1
@@ -38,7 +38,8 @@
|
||||
- вырожденный ответ (пустой, усечённый, без ожидаемого поля) не превращает в
|
||||
успех молча.
|
||||
|
||||
**Репозиторий хранилища** (`internal/adapter/repo/pocketbase`):
|
||||
**Репозиторий хранилища** (`internal/adapter/repo/pocketbase`; шаги схемы —
|
||||
подпакетом `migrations`):
|
||||
|
||||
- список колонок совпадает во всех четырёх местах — `applyToRecord`,
|
||||
`recordToJob`, `acquireColumns`, `acquiredRow` — и в шаге схемы (инвариант
|
||||
|
||||
Reference in New Issue
Block a user