feat: complete Epic 1 production foundation

This commit is contained in:
2026-08-25 01:24:11 +03:00
parent 767428436d
commit 182bde8ac0
298 changed files with 35719 additions and 5299 deletions
+14 -3
View File
@@ -4,10 +4,15 @@
## Перед запуском
- Сгенерирован сильный `CRANK_MASTER_KEY`.
- Сгенерирован сильный `CRANK_MASTER_KEY` длиной не менее 32 bytes.
- Зафиксирована процедура хранения и восстановления `CRANK_MASTER_KEY` вне
product backup set; есть защищённый opaque `backup_ref` для rotation.
- Сгенерирован сильный `CRANK_SESSION_SECRET`.
- Сгенерирован сильный `CRANK_PASSWORD_PEPPER`.
- Задан надежный `CRANK_BOOTSTRAP_ADMIN_PASSWORD`.
- Подготовлена локальная процедура `crank-migrate admin-auth bootstrap-create`;
static startup-пароль администратора не используется в production.
- Подготовлены защищённые local files для `crank-migrate admin-auth recover`:
новый Admin password, текущий `CRANK_PASSWORD_PEPPER` и current master key.
- `CRANK_BASE_URL` указывает на публичный HTTPS URL.
- `CRANK_ENVIRONMENT=production`.
- Если используется внешний приёмник критических ошибок, задан корректный
@@ -24,10 +29,13 @@
- `curl /health` для `mcp-server` возвращает `ok`.
- `curl /ready` для `admin-api` и `mcp-server` возвращает `ready`.
- UI открывается по публичному домену.
- Вход под bootstrap admin работает.
- Создан первый admin через одноразовый bootstrap token, повтор token
отклоняется, обычный login работает.
- Demo seed создал Frankfurter-пример, если `CRANK_DEMO_SEED=true`.
- Тест операции `frankfurter_latest_rate` проходит.
- MCP-клиент видит инструмент через агента `currency-rates`.
- `admin-api` и `mcp-server` используют один active master-key identity; запуск
с неверным `CRANK_MASTER_KEY` проверен как fail-closed на staging.
- Каждая непустая строка stdout `admin-api` и `mcp-server` является
корректным JSON и содержит `service`, `environment` и `event`.
- При включённом канале контрольная критическая ошибка появляется у приёмника
@@ -41,6 +49,9 @@
- Удаляйте или отзывайте ключи, которые больше не используются.
- Используйте secrets/auth profiles для токенов внешних API.
- Не вставляйте реальные токены в статические заголовки операции.
- Не меняйте `CRANK_MASTER_KEY` напрямую. Для смены ключа выполняйте
`crank-migrate master-key preflight → rotate → verify → promote`, затем
перезапускайте secret-using процессы с target key.
## Эксплуатация