migrations

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: AGPL-3.0 Imports: 1 Imported by: 0

README

kaname — миграции

Schema kaname. Число миграций здесь НЕ выписано намеренно: оно росло с каждой задачей, а строка с ним не правилась ни разу — на момент этой правки документ утверждал двадцать четыре при ста семнадцати файлах в каталоге. Перечень получают предикатом, а не памятью:

ls services/iam/internal/migrations/*.sql | wc -l

Номера в каталоге принадлежат трём эрам сразу (0001_initial.sql и далее по возрастанию — ранняя; затем выведенные из номера задачи; затем по метке времени). Смешение законно: переномеровать применённое нельзя.

Форма НОВОЙ миграции — метка времени заведения YYYYMMDDHHMMSS_<имя>.sql (date -u +%Y%m%d%H%M%S). Объявлена она в ОДНОМ месте и здесь НЕ переписывается: docs/architecture/migration-version-namespace.md — там же названо, чем закрыты доводы двух прежних форм. Держит форму гейт internal/repohygiene TestNewMigrationOutranksEveryAppliedOne; он судит ТОЛЬКО добавленные относительно ствола файлы. Создают миграции этого каталога:

  • core resource model (operations, users, accounts, projects, service_accounts, groups, group_members, roles, access_bindings)
    • default-roles seed (12 system-ролей с детерминированными id);
  • governance расширения (access_bindings_jit_eligibility, _jit_pending, break_glass_*);
  • federation / identity (federation_*, scim_*);
  • чеканку своих токенов — ключница подписных ключей (token_signing_keys: kid, алгоритм, состояние, публичная половина, ОБЁРНУТАЯ приватная половина, срок; «подписывает ровно один» держит частичный уникальный индекс) и отзыв отчеканенного (minted_token_revocations);
  • outbox-cluster (fga_outbox, subject_change_outbox, caep_outbox, audit_outbox).

[!note] Прежнее хранилище подписных ключей здесь названо не было, и это не опечатка редакции Оно существовало, стояло в этом перечне и было СНЯТО миграцией: приватную половину не читал обратно никто, а запись в хранилище удавалась — поэтому оно выглядело исправным всё время своей жизни. Имя снятой таблицы в этом перечне не воспроизводится: в перечне действующих таблиц оно читается как действующая координата. Его текст остался в применённых миграциях и в ведомости дропов — там он свидетельство, и править его нельзя.

Ключница задачи #897 названа ИНАЧЕ намеренно. Совпадение имён сделало бы стража ведомости дропов красным СПРАВЕДЛИВО: он увидел бы воскресшую таблицу, которую сам же считает снятой.

CHECK / FK / UNIQUE / partial UNIQUE / триггеры inline в соответствующих миграциях. Helper-функции: kacho_labels_valid(jsonb), iam_permissions_valid(jsonb), триггер group_members_member_exists_trg.

Squash в единый 0001_initial.sql baseline запланирован в Wave M рефакторинга KAC-193 (после Wave D evgeniy-compliance pass).

Запуск

make migrate-up (требует KANAME_DB_PASSWORD=...).

Запреты

  • НЕ редактировать примененную миграцию (workspace CLAUDE.md запрет #5) — только новая миграция, и её номер — метка времени заведения (YYYYMMDDHHMMSS_<имя>.sql), а не следующий по порядку. Здесь стояло «следующий — 0025_*»: номер выписан, ни разу не правился и разошёлся с деревом на порядки (в каталоге живут 0092, 484002, 795001), а инкрементная форма к тому же отвергается гейтом формы. Каталог не пересчитывают глазами — предикат выше.
  • Таблица operations объявлена в baseline под схемой kaname. Цели, которая «подтягивала бы общую operations», больше нет: она ничего не делала ни в одном сервисе, а копия common-файла создала бы конфликтующий unqualified public.operations.

Documentation

Index

Constants

This section is empty.

Variables

FS — embedded миграции (squashed baseline в одном файле). Используется cmd/migrator/main.go через runner.Config.FS.

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL